2017.10.10 取石子游戏 失败总结
来源:互联网 发布:数据库mdf文件过大 编辑:程序博客网 时间:2024/06/07 03:50
博弈,只是把取的条件变了一下,,就不会了
首先对于一个区间,若他为必胜,则往左右两边只有加唯一一个数会使他必败,略等同于nim的情况
然后剩下的递推其实是构造类问题。
由于每次只能取最左边和最右边的,所以状态可以从两边转移
一边构造理想情况一边更新
更详细的做法:点击打开链接
本质就是区间dp+构造,,只是证明、结论考虑因素比较多所以不好推
码:
#include<iostream>#include<cstdio>using namespace std;int T,a[1005],l[1005][1005],r[1005][1005],n,i,j;int main(){ scanf("%d",&T); while(T--) {scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]),l[i][i]=r[i][i]=a[i];if(n==1){printf("1\n");continue;}for(i=n-1;i>=1;i--)for(j=i+1;j<=n;j++){ int x=l[i][j-1],y=r[i][j-1],z=a[j]; if(z==y){ l[i][j]=0;} else { if((z<x&&z<y)||(z>x&&z>y)){l[i][j]=z;} if(x<=z&&z<y){l[i][j]=z+1;} if(x>=z&&z>y){l[i][j]=z-1;} } x=l[i+1][j],y=r[i+1][j],z=a[i]; if(z==y){ r[i][j]=0;} else { if((z<x&&z<y)||(z>x&&z>y)){r[i][j]=z;} if(x<=z&&z<y){r[i][j]=z+1;} if(x>=z&&z>y){r[i][j]=z-1;} } } if(a[1]==l[2][n])printf("0\n"); else printf("1\n"); } }
阅读全文
0 0
- 2017.10.10 取石子游戏 失败总结
- 取石子游戏【各类取石子总结】
- 取石子游戏--各类取石子总结
- "取石子"游戏
- 取石子游戏
- 取石子游戏
- 取石子游戏
- POJ1067取石子游戏
- PKU1067 取石子游戏
- 取石子游戏
- 取石子游戏
- 1067 取石子游戏
- PKU1067(取石子游戏)
- 1679 取石子游戏
- 1773 取石子游戏
- 取石子游戏
- POJ_取石子游戏
- 取石子游戏
- CF869C:C. The Intriguing Obsession(组合数)
- Hankson 的趣味题——唯一分解定律
- 开发板之按键中断流程
- 前端面试碰到过的面试题和笔试题~
- 03动态规划基础---机器人走方格问题
- 2017.10.10 取石子游戏 失败总结
- IE6,IE7,IE8,IE9,FIREFOX,Chrome等浏览器兼容详解收集
- 深度神经网络模型压缩
- Java面试题全集(4)
- 01-复杂度1 最大子列和问题
- SQL Server之选出某个字段中全部为数字或全部为字母的记录
- 2017 乌鲁木齐赛区网络赛 Half-consecutive Numbers(【规律题】)
- 跳台阶(剑指Offer 第 8 题)
- java 中Math.sqrt()使用注意事项 Type mismatch: cannot convert from double to float