rqnoj-116-质数取石子-dp
来源:互联网 发布:数据分析相关工作职位 编辑:程序博客网 时间:2024/05/11 05:09
dp[1][i]:
DD选择的时候,剩余i石子,DD赢的最小步数。若此时DD是必败态,则为-1;
dp[2][i]:
MM选择的时候,剩余i石子,MM输的最大步数。若此时DD是必胜态,则为-1;
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<math.h>using namespace std;#define maxn 20050int prime[maxn];int isprime[maxn];int nearprime[maxn];int numprime;int dp[3][maxn];void dos(){ prime[0]=0; prime[1]=0; prime[2]=1; for(int i=3;i<maxn;i++)prime[i]=i%2; for(int i=2;i<sqrt(maxn);i++) { if(prime[i]==0)continue; for(int j=2;j*i<maxn;j++) { prime[j*i]=0; } } numprime=0; for(int i=0;i<maxn;i++) { if(prime[i])isprime[numprime++]=i; nearprime[i]=numprime-1; }}int pan(int people,int n){ int i; if(dp[people][n]!=-2)return dp[people][n]; if(people==1) { int leap=0; dp[1][n]=9999999; if(prime[n]||prime[n-1]) { dp[1][n]=1; return 1; } for(i=0;i<=nearprime[n];i++) { if(pan(2,n-isprime[i])>-1) { dp[1][n]=min(dp[1][n],dp[2][n-isprime[i]]+1); leap=1; } } if(leap==0)dp[1][n]=-1; } else if(people==2) { dp[2][n]=0; if(prime[n]||prime[n-1]) { dp[2][n]=-1; return -1; } for(i=0;i<=nearprime[n];i++) { if(pan(1,n-isprime[i])==-1) { dp[2][n]=-1; break; } else { dp[2][n]=max(dp[1][n-isprime[i]]+1,dp[2][n]); } } } return dp[people][n];}void play(){ dos(); int i; for(i=0;i<maxn;i++)dp[1][i]=dp[2][i]=-2; dp[1][0]=-1; dp[1][1]=-1; dp[1][2]=1; dp[2][0]=0; dp[2][1]=0; dp[2][2]=-1; for(i=3;i<maxn;i++) { dp[1][i]=pan(1,i); }}int main(){ int n,m; play(); scanf("%d",&n); while(n--) { scanf("%d",&m); printf("%d\n",dp[1][m]); } return 0;}
- rqnoj-116-质数取石子-dp
- rqnoj-116-质数取石子
- YCJSOI1472 质数取石子(博弈dp)
- Rqnoj116 质数取石子
- uva10404(DP 取石子)
- Cogs 56. 质数取石子(博弈)
- DP算法- 循环取石子
- RQNOJ 石子合并
- rqnoj-36-数石子
- RQNOJ-36 数石子
- RQNOJ PID36 数石子
- rqnoj-314-[NOIP2000]方格取数-多线程dp
- 取石子
- 取石子
- 取石子
- 取石子
- 取石子
- 取石子
- 利用android_ndk以及OpenGLES开发动态壁纸
- CCAnimation创建动画cocos2d-x
- GCD介绍(一): 基本概念和Dispatch Queue
- HTTP请求:GET与POST方法的区别
- 笔试面试题:25匹赛马,5个跑道,每次有5匹马可以同时比赛。问最少比赛多少次可以知道跑得最快的5匹马
- rqnoj-116-质数取石子-dp
- 自己动手配置oracle dataguard
- 禁用屏幕拷贝(Print Screen),调用派生的析构函数及其它
- 面试题-前端-问答题-javascript中字符串格式json如何转化成json对象
- k路归并 - 败者树实现
- Cmdlet学习笔记(1)——Hello Cmdlet
- Oracle RMAN数据库备份脚本
- DFS+思维-PKU Online Judge-1054:Cube
- 发生问题时程序员最常见的 30 种反应