您的位置:首页 > 其它

2016.10.05【初中部 NOIP普及组 】模拟赛

2016-10-05 15:15 281 查看
网址:https://jzoj.net/junior/#contest/home/1345

T1:

题目大意:给你分子的因子和分母的因子,求最简的分母是什么。

           可以直接高精度乘法,后除法,但没那么方便。

            可以先抵消,在高精度乘低精度:



<strong><span style="font-size:14px;">procedure dd(k:longint);
var
j:longint;
begin
for j:=1 to ans do
num[j]:=num[j]*k;
j:=1;
while j<=ans do
begin
inc(num[j+1],num[j] div 10);
num[j]:=num[j] mod 10;
if (num[j+1]>0) and (j+1>ans) then inc(ans);
inc(j);
end;
ans:=j-1;
end;</span></strong>


T2:

简化一下题目,可能大家懵逼了:

                 即第一个人传的最多一个时间的秘密是多少。

                 前提必须是最短的。所以SPFA后,求一个非最大值的最长的一个需要传到那个人位置的时间。

T3:

即传纸条。

           怎么划分阶段?

           于是我就想,平时都是二维来求最大的,不如用四维?说来就来。

     
  
设f[i][j][k][l]为从 (0, 0) 位置由两条不交叉的线路分别走到 (i, j),(k,
l) 位置时的最大好感度和,则它的上一步可能有四种情况,分别是原位置的(左,上)(左,左)(上,上)(上,左),可以表示为:


       
1、f[i - 1][j][k - 1][l] + a[i][j] + a[k][l]   
 


                2、f[i - 1][j][k][l - 1] + a[i][j] + a[k][l]

                3、f[i][j - 1][k - 1][l] + a[i][j] + a[k][l]

                4、f[i][j
- 1][k][l - 1] + a[i][j] + a[k][l]


           
 取四者最大,提取相同的a[i,j]+a[k,l]在末尾,就可以简便一下。


       注意一下 开头结尾只算其中一个的要求。

<span style="font-family:Arial;font-size:10px;">for i:=1 to n do
for j:=1 to m do
for k:=1 to n do
for l:=1 to m do
begin
if (i=k)and(j=l) then
begin
f[i,j,k,l]:=a[i,j]+max(f[i-1,j,k-1,l],f[i-1,j,k,l-1], f[i,j-1,k-1,l], f[i,j-1,k,l-1]);
continue;
end;
f[i,j,k,l]:=a[i,j]+a[k,l]+max(f[i-1,j,k-1,l],f[i-1,j,k,l-1], f[i,j-1,k-1,l], f[i,j-1,k,l-1]);
end;</span>T4:
   
题目大意:


             求有规定的做任务的好感度最大值,类似于完全背包,但是递归水过。

     递归就可以了,DP可能可以,但是很难,递归太水,不讲了!

      蛋疼,考试pascal狂卡机,明明记得我乘了个g了,但是没保存,日!少了50分,否则AK了/(ㄒoㄒ)/~~

       procedure dg(y,k,h,kk:longint);//分别表示,用去时间,选了k个,好感度,当前选到第几个
var
i:longint;
begin
if (y>0)and(k>=m)and(y<=t) then
if h+(t-y)*g>max then max:=h+(t-y)*g;//g即dota的好感度
if y>t then exit;
if kk>n then exit;
dg(y+a[kk,1],k+1,h+a[kk,2],kk+1);
dg(y,k,h,kk+1);
end;总结:
     比赛很水,NOIP不水,继续努力!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: