2016.10.05【初中部 NOIP普及组 】模拟赛
2016-10-05 15:15
281 查看
网址:https://jzoj.net/junior/#contest/home/1345
T1:
题目大意:给你分子的因子和分母的因子,求最简的分母是什么。
可以直接高精度乘法,后除法,但没那么方便。
可以先抵消,在高精度乘低精度:
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不水,继续努力!
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不水,继续努力!
相关文章推荐
- 2016.10.05【初中部 NOIP普及组 】模拟赛题解
- 2016.10.05【初中部 NOIP普及组 】模拟赛
- 2016.10.05【初中部 NOIP普及组 】模拟赛
- 2016.10.05【初中部 NOIP普及组 】模拟赛&Aug~Sep总结
- 2016.08.19上午【初中部 NOIP普及组 】模拟赛题目
- 2016.08.18【初中部 NOIP普及组 】模拟赛
- 2016.08.18【初中部 NOIP普及组 】模拟赛
- 2016.08.19【初中部 NOIP普及组 】模拟赛
- 2016.09.10【初中部 NOIP普及组 】模拟赛题解
- 2016.08.18【初中部 NOIP普及组 】模拟赛题解
- 2016.08.19上午【初中部 NOIP普及组 】模拟
- 2016.5.28【初中部 NOIP普及组 】模拟赛
- 2016.08.19 初中部 NOIP普及组 模拟赛
- 2016.08.19上午【初中部 NOIP普及组 】模拟赛题解
- 2016.08.19上午【初中部 NOIP普及组 】模拟赛题解
- 2016.08.18【初中部 NOIP普及组 】模拟赛题解
- 2016.08.19上午【初中部 NOIP普及组 】模拟赛
- 2016.11.13【初中部 NOIP普及组 】模拟赛
- 2016.5.28【初中部 NOIP普及组 】模拟赛
- 2016.08.18【初中部 NOIP普及组 】模拟赛题目