取数游戏

来源:互联网 发布:hadoop超市数据分析 编辑:程序博客网 时间:2024/05/17 22:21
有一个双人游戏:
N(2 <=N<=200,且为偶数)个正整数的序列放在一个游戏平台上,A、B两人轮流从序列的两端取数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜(A先取,得分相同算A胜)。试求:
如何取数,才能使得A与B的得分差距最大?
(提示:A、B双方都在想方设法取胜)
{不是贪心不是模拟想获胜不是从两端取最大的f[i,j]表示在区间i,j先取数的人所能得到的最大得分初始值f[i,i]:=ai;从取第I个和区第J个中比较最大的差值最大——一个人得分最高!}var     a:array[0..100] of longint;     f:array[0..100,0..100] of longint;     sum:array[0..100] of longint;     i,n,j,p:longint;function min     (x,y:longint):longint;begin  if x<y then exit(x) else exit(y);end;begin  read(n);  for i:=1 to n do read(a[i]);  for i:=1 to n do f[i,i]:=a[i];  for i:=1 to n do   for j:=1 to i do    sum[i]:=sum[i]+a[j];  for i:=1 to n-1 do   for j:=1 to n-i do    begin     p:=i+j;     f[j,p]:=sum[p]-sum[j-1]-min(f[j+1,p],f[j,p-1]);    end;  //for i:=1 to n do write(sum[i]:3);  writeln(f[1,n],' ',sum[n]-f[1,n])end.





0 0
原创粉丝点击