#1 181818181818@2008-08-20 02:22:00
5035
回复
删除
看看我的程序:
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否则会死,我就因此死了好几次。
#3 Zx.MYS@2008-09-08 05:32:00
5865
回复
删除
function max(a,b:qword):qword;
begin
if a>b then max:=a else max:=b;
end;
难道是因为不能这样写么?