讨论 / 我抓狂了!!!还是WA
aaa741852h 2010-05-27 20:55:00
点我顶贴 收藏 删除
program p140;

var i,j,k,n,v,b:longint;

f:array[0..10]of longint;

a:array[1..10,1..100]of longint;

function max(x,y:longint):longint;

begin

if x>y then max:=x

else max:=y;

end;

begin

readln(v,n,b);

for i:=1 to n do

for j:=1 to v do

read(a[i,j]);

for i:=1 to n do

for j:=v downto 0 do

for k:=1 to v do

if j-k-b>=0 then

f[j]:=max(f[j],f[j-k-b]+a[i,k])

else f[j]:=f[j];

write(f[v]);

end.

#1 ccyyxx1998@2010-05-27 20:55:00
回复 删除
选上我吧

var i,j,n,s,na,k:longint;

a:array[1..100]of longint;

f:array[0..100]of int64;

begin

readln(s,n,na);

for i:=1 to n do begin

for j:=1 to s do read(a[j]);

readln;

for j:=s downto 0 do

//枚举总时间做j分钟,之所以倒序,是因为前面的结果会影响后面的结果,顺序的话就不

//是最优值了

for k:=1 to j-na do

//na是写名字的时间,枚举做试卷的时间k,a[k]是做k分钟得的分数

if a[k]+f[j-k-na]>f[j] then

//因为k+na不一定把时间用完,为了最优,就要把剩下总时间的最优值f[j-k-na]加上现在

//科目的分数a[k]

f[j]:=a[k]+f[j-k-na];

//与之前算到的最优值比较,取更优的值,为后面的运算做铺垫

end;

//提醒一下,f数组是储存总科目的优值,而a数组只是暂时存一下当前科目每分钟的分数

writeln(f[s]);

//因为s是总时间,所以总时间的最优值就是结果

end.

查看更多回复
提交回复