bzoj 1413 [ZJOI2009]取石子游戏 博弈论 dp
来源:互联网 发布:ps苹果mac正版要多少钱 编辑:程序博客网 时间:2024/04/28 09:56
果然浙江出神题呀。。。
首先有这么一个结论:对于一段区间的石子,在这段区间左侧放一堆石子(个数可以为0)有且仅有一个石子个数使得到的状态为先手必败态。
1.因为如果有一种以上的个数,假设有
2.如果没有石子个数为先手必败态,那么每一个必胜态对应转移到的必败态一定是在右侧选一些石子,由于有无穷多个必胜态因此一定有一种在右侧选石子的方案对应两个以上必胜态,那么这种方案选完后对应两个以上必败态,与1矛盾。
因此有且仅有一种石子个数使得到的状态为先手必败态(在右边放同理)。
然后设
考虑计算
设
1.特殊情况
2.
3.
4.
5.
当
#include <bits/stdc++.h>using namespace std;#define N 1100int T,n;int a[N],l[N][N],r[N][N];int main(){ ///freopen("tt.in","r",stdin); scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); if(n==1){puts("1");continue;} for(int i=1;i<=n;i++) l[i][i]=r[i][i]=a[i]; for(int i=1;i<=n;i++) for(int j=1;j+i<=n;j++) { int x=l[j][j+i-1],y=r[j][j+i-1],z=a[j+i]; if(y==z)l[j][j+i]=0; else if(x>z&&y>z)l[j][j+i]=z; else if(x<=z&&y>z)l[j][j+i]=z+1; else if(x>z&&y<z)l[j][j+i]=z-1; else l[j][j+i]=z; x=r[j+1][j+i],y=l[j+1][j+i],z=a[j]; if(y==z)r[j][j+i]=0; else if(x>z&&y>z)r[j][j+i]=z; else if(x<=z&&y>z)r[j][j+i]=z+1; else if(x>z&&y<z)r[j][j+i]=z-1; else r[j][j+i]=z; } puts(l[2][n]==a[1] ? "0":"1"); } return 0;}
0 0
- bzoj 1413 [ZJOI2009]取石子游戏 博弈论 dp
- BZOJ 1413 [ZJOI2009] [洛谷2599] 取石子游戏 (博弈论 dp )
- bzoj 1413: [ZJOI2009]取石子游戏(博弈+DP)
- bzoj 1874 取石子游戏 博弈论
- 博弈论--取石子游戏
- 【 bzoj 3895 】 取石子 - 博弈论
- 博弈论之取石子游戏
- 取石子游戏 (经典博弈论)
- 博弈论, 取石子游戏1
- POJ1067 取石子游戏(博弈论)
- 算法——博弈论:取石子游戏
- 取石子游戏 - POJ 1067 博弈论
- HDU 2516 取石子游戏 (博弈论)
- 博弈论 ,一个新的取石子游戏
- HDU 1527 取石子游戏(博弈论)
- hdu 2516 取石子游戏 (博弈论)
- 取石子游戏 - HDU 2516 博弈论
- 博弈论初探——取石子游戏
- heallth1
- Android中极简的js与java的交互库-SimpleJavaJsBridge
- sleep function
- onSaveInstanceState(...) 方法设备旋转数据保存
- 修改android app 字体格式
- bzoj 1413 [ZJOI2009]取石子游戏 博弈论 dp
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- Linux 下配置多个tomcat
- Autolayout 中的百分比宽度
- 为啥Activity默认继承AppCompatActivity
- Jre, JVM 和 JDK
- 加载GIF图片优化方案
- 二分查找
- Oracle将出生日期装换为年龄