USACO 3.2 A game
这题DP 方程如下 (参考了 DRS 上的帖子.......)
![]()
写完这个程序.....狂兴奋.....嘿嘿........
![]()
![]()
庆祝................ 加油......继续努力.......
程序如下
设 F1[I,J] 为第一个人(先行者) 从I 取到 J 的最大分数 F2[I,J] 同样..... S[I] 为 第 I 张牌的分数..... Sum[I] 为第 1 到第 I 张牌的分数总和.... F1[I,J]=max{ F2[I+1,J]+S[I] , F2[I,J-1]+S[J] } F2[I,J]=Sum[J]-Sum[I-1]-F1[I,J] |

写完这个程序.....狂兴奋.....嘿嘿........ 

庆祝................ 加油......继续努力.......
程序如下
{ ID:helen_l3 PROB:game1 LANG:PASCAL } program game1; const maxn=100; inf='game1.in'; ouf='game1.out'; var f1,f2:array [1..maxn,1..maxn] of longint; sum,s:array [0..maxn] of longint; n:longint; procedure init; var i:longint; begin assign(input,inf);reset(Input); readln(n); fillchar(sum,sizeof(sum),0); for i:=1 to n do begin read(s); sum:=sum[i-1]+s; end; close(input); end; function max(a,b:longint):longint; begin if a>b then max:=a else max:=b; end; procedure main; var i,j,k:longint; begin for k:=1 to n-1 do for i:=1 to n-k do begin j:=i+k; f1[i,j]:=max(f2[i+1,j]+s,f2[i,j-1]+s[j]); f2[i,j]:=sum[j]-sum[i-1]-f1[i,j]; end; end; procedure out; var i:longint; begin assign(output,ouf);rewrite(output); writeln(f1[1,n],' ',sum[n]-f1[1,n]); close(output); end; begin init; main; out; end. |

浙公网安备 33010602011771号