[SGU]104. Little Shop of Flowers

来源:互联网 发布:怎么重装windows xp 编辑:程序博客网 时间:2024/05/17 22:37

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.