码迷,mamicode.com
首页 > 其他好文 > 详细

取数游戏

时间:2015-08-06 21:52:34      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

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;  
writeln(f[1,n], ,sum[n]-f[1,n])  
end.

 

取数游戏

标签:

原文地址:http://www.cnblogs.com/yangqingli/p/4709268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!