zoukankan      html  css  js  c++  java
  • JZ高中OJ 1308.取数游戏

    Description

      Alice想让Bob陪他去看《唐山大地震》,但由于Bob是个很感性的人,怕流泪不想去,但又不好意思以这个作为拒绝的理由,便提出玩一个游戏。
      N个正整数围成一圈,规则如下:
      •两个玩家轮流取数;
      •最开始先手的玩家可以取任意一个数x;
      •从第二步开始当前玩家只能取x(上一玩家刚刚取的数)左右两边相邻的数;
      •直到取完所有的数,游戏结束;
      •取得较多奇数的玩家获胜。
      Bob为了显示大度,让Alice先取,但他忘了自己和Alice都是绝顶聪明之人,现在Alice请你帮他计算第一步有多少种取法使得最终获得胜利。
     

    Input

      第一行包含一个整数N(1<=N<=100),表示数的个数。第二行包含N个正整数,每个数都在1到1000之间,任意两个数互不相同。

    Output

      输出Alice第一步有多少种取法。
     

    Sample Input

    输入1:
    3
    3 1 5
    
    输入2:
    4
    1 2 3 4
    
    输入3:
    8
    4 10 5 2 9 8 1 7
    

    Sample Output

    输出1:
    3
    
    输出2:
    2
    
    输出3:
    5
     1 #include<bits/stdc++.h>
     2 #define IL inline
     3 using namespace std;
     4 const int N=100;
     5 
     6     int n,a[N*2+3];
     7     int f[N*2+3][N*2+3];
     8     
     9 int main(){
    10     cin>>n;
    11     for(int i=1;i<=n;i++)
    12         cin>>a[i];
    13     
    14     for(int i=1;i<=n;i++)
    15         a[i]&=1;
    16     for(int i=1;i<=n;i++)
    17         a[i+n]=a[i];
    18     
    19     for(int i=1;i<=n*2;i++)
    20         f[i][i]=a[i];
    21     
    22     for(int t=2;t<=n;t++)
    23         for(int i=1;i+t-1<=n*2;i++){
    24             int j=i+t-1;
    25             f[i][j]=max(a[i]-f[i+1][j],a[j]-f[i][j-1]);
    26             
    27         }
    28         
    29     int ans=0;
    30     for(int i=1;i<=n;i++)
    31     if(a[i]-f[i+1][i+n-1]>0)
    32         ans++;
    33         
    34     cout<<ans;
    35     
    36     return 0;
    37     
    38 }
  • 相关阅读:
    Python 字符串格式化
    centos 7 & 6 优化脚本
    centos7.X 系统初始化>>优化
    重新嫁接rm命令
    ArcGIS Engine 10 开发常见问题的解决方法
    数据提交成功后如何避免alert被window.location.reload()影响
    服务器端IIS中部署带Office组件程序
    常用正则表达式
    C#解析XML
    使用Spire.Doc组件利用模板导出Word文档
  • 原文地址:https://www.cnblogs.com/dsanying/p/11305391.html
Copyright © 2011-2022 走看看