讨论 / 大牛 or 小菜(总之会就可以进)
LIFE 2008-09-08 05:32:00
点我顶贴 收藏 删除
这道题怎么做!
#1 181818181818@2008-08-20 02:22:00
回复 删除
看看我的程序:

f【i,j】表示前i+j个塔放了i个蓝塔,j个绿塔的最大值

program vijos1417;

var i,j:longint;

f:array[0..1024,0..1024]of qword;

max,o,n,r,g,b,t:qword;

begin

readln(n,r,g,b,t);

f[0,0]:=n*r*t;

max:=f[0,0];

for i:=1 to n do

begin

f[i,0]:=(n-i)*r*(t+b*i);

f[0,i]:=f[0,i-1]-r*t+g*(n-i)*t;

if max<f[i,0]then max:=f[i,0];

if max<f[0,i]then max:=f[0,i];

end;

for i:=1 to n do

for j:=1 to n-i do

begin

f[i,j]:=f[i-1,j]+(n-i-j)*r*b+(n-i-j)*(g*j)*b-r*(t+(i-1)*b);

o:=f[i,j-1]+(n-i-j)*g*(t+i*b)-r*(t+i*b);

if o>f[i,j]then f[i,j]:=o;

if f[i,j]>max then max:=f[i,j];

end;

writeln(max);

end.

注意所有变量(除循环变量)都要用QWORD否则会死,我就因此死了好几次。

#2 Zx.MYS@2008-09-08 05:30:00
回复 删除
囧,不知道为什么我用qword就死,老输出18446744073709518849

用int64却AC……

#3 Zx.MYS@2008-09-08 05:32:00
回复 删除
function max(a,b:qword):qword;

begin

if a>b then max:=a else max:=b;

end;

难道是因为不能这样写么?

查看更多回复
提交回复