Analysis
本题是一道基础的动态规划题。设w[i,j]为前i种花放入前j个花瓶所能达到的最大值,则w[i,j]=max(w[i,j-1],w[i-1,j-1]+a[i,j])。题目来源是IOI99。
Accepted Code
var
w,a:array[0..100,0..100] of longint;
ans:array[0..1000] of longint;
f,v,i,j:longint;
function max(a,b:longint):longint;
begin
if a>b then
max:=a
else
max:=b;
end;
begin
readln(f,v);
for i:=1 to f do
for j:=1 to v do
read(a[i,j]);
fillchar(w,sizeof(w),0);
for i:=1 to f do
for j:=i to v do
w[i,j]:=max(w[i,j-1],w[i-1,j-1]+a[i,j]);
writeln(w[f,v]);
i:=f;
j:=v;
while i>0 do
begin
while w[i,j]<>w[i-1,j-1]+a[i,j] do
dec(j);
ans[i]:=j;
dec(j);
dec(i);
end;
for i:=1 to f-1 do
write(ans[i],' ');
writeln(ans[f]);
end.