题目大意:

有2n个人,从0开始编号,按编号奇偶分为两队,循环轮流取一堆有m个石子的石堆,偶数队先手,每个人至少取1个,至多取w[i]个,取走最后一个石子的队伍输。问偶数队是否能赢。

分析:

题目数据不大很容易就可以联想到DP博弈,设dp[i][j]表示轮到第i个人,还有j个石子的情况下他所属队伍是否能赢。 
那么如果存在一个x,使第i个人取了x个石子后第(i+1)%2n个人无论如何都败,那么他就可以赢;若不存在则输。即是: 
dp[i][j]=(dp[(i+1)%2n][j-1]&dp[(i+1)%2n][j-2]&……&dp[(i+1)%2n][j-w[i]])^1; 
由于有循环,所以直接dp不好做,改用记忆化搜索。

#include<stdio.h>
#include<string.h>
int dp[][],a[],n;
int dfs(int id , int val)
{
if(val==)
return dp[id][val]=;
if(dp[id][val]!=-)
return dp[id][val];
dp[id][val]=;
for(int i= ; i<=a[id] ; i++)
{
if(val<i)
break;
if(!dfs((id+)%(*n),val-i))
dp[id][val]=;
} return dp[id][val];
}
int main( )
{
int m;
while(scanf("%d",&n)!=EOF)
{
if(n==)
break;
scanf("%d",&m);
for(int i= ; i<*n ; i++)
scanf("%d",&a[i]);
memset(dp,-,sizeof(dp));
printf("%d\n",dfs(,m)); }
}

最新文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
  2. 利用fis3自动化处理asp.net项目静态资源时遇到的一个编码问题
  3. Android 5.X新特性之RecyclerView基本解析及无限复用
  4. JavaWeb路径问题打包总结--小心出门右转404
  5. 在RichFaces中使用Facelets模板
  6. 30天C#基础巩固----查找XML文件元素
  7. SELECTION-SCREEN 文本丢失
  8. ASP.NET MVC统一异常处理
  9. java读取properties文件的内容
  10. Android 怎样使用API
  11. eclipse.ini配置eclipse的启动参数
  12. 【转载】TCP协议疑难杂症全景解析
  13. 编写存储过程导出oracle表数据到多个文本文件
  14. Spark源码分析之Spark-submit和Spark-class
  15. Java基础学习笔记十六 集合框架(二)
  16. SSM整合Netty5.0详细说明
  17. SyntaxError: invalid character in identifier(Python)
  18. week4_1
  19. Shell 实现多线程(多任务)
  20. MySQL常用内置变量

热门文章

  1. java枚举学习enum
  2. [转]HTTP中cache-control的应用及说明
  3. android开发之Bitmap 、byte[] 、 Drawable之间的相互转换
  4. Docker容器里的进程为什么要前台运行
  5. socket发送结构体
  6. 巧用函数实现js插入css样式
  7. 【java并发编程艺术学习】(二)第一章 java并发编程的挑战
  8. linux命令-vim一般模式下光标移动
  9. hadoop2.6.0完全分布式部署
  10. [转发]深入理解git,从研究git目录开始