• [CODEVS1037]取数游戏


    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.
  • 相关阅读:
    Socket接受多包的问题
    用C#实现winform对数据库读写图片
    C#下载代码,防迅雷
    linux的用户和组
    计算机硬件基础
    操作系统及网络协议
    mysql cluster排错经验分享
    清空使用的swap方法
    智能DNS的安装和配置
    关于nginx和cacti的一次排错经历
  • 原文地址:https://www.cnblogs.com/yangqingli/p/4709268.html
Copyright © 2020-2023  润新知