Ural 1087|The Time to Take Stones|博弈论|动态规划
来源:互联网 发布:python擅长 编辑:程序博客网 时间:2024/06/18 10:29
http://acm.timus.ru/problem.aspx?space=1&num=1087
题目
你应该知道一种游戏,2个玩家轮流从一堆石子中取走1到3个石子。最后一个取走石子的人输。我们泛化这个游戏的条件。假设玩家可以从石子堆中一次取走
输入
第一行2个整数
输出
如果先手赢输出1,后手赢输出2。
样例输入
17 31 3 4
样例输出
2
题解
题目的最后一句话暗示我们采用动态规划。
如果最后只剩1个石子留给先手,那么先手必输,没有赢的可能。如果只剩2个石子留给先手,那么先手可以只取1个石子,只剩1个石子给后手,后手必输,没有赢的可能。也就是说,取走一次石子后剩下的石子对于准备取石子的人是赢还是输是不分先手后手的,因此令
那么对于
也就是说采取最佳策略,就是我们存在一种选择,可以让对方必输,我们就必赢。这是博弈论基本的道理。
#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;++i)int f[16384], k[64];int main(){ int i, j, m, n; scanf("%d%d", &n, &m); FOR(i,1,m) scanf("%d", &k[i]); FOR(i,2,n) FOR(j,1,m) if (i > k[j] && !f[i - k[j]]) { f[i] = 1; break; } printf("%d\n", f[n] ? 1 : 2); return 0;}
阅读全文
0 0
- Ural 1087|The Time to Take Stones|博弈论|动态规划
- Ural 1087. The Time to Take Stones
- Ural 1087. The Time to Take Stones 递推+博弈
- ural 1087. The Time to Take Stones(博弈)
- Problem H. Game with the Stones 博弈论
- The Janki Method Shortens the Time It’ll Take You to Learn to Code
- To The Max(动态规划)
- 动态规划 URAL 2018
- Take Two Stones
- GYM 100090 H.Game with the Stones(博弈论)
- Problem 1538 - B - Stones II (动态规划)
- POJ 1050-To the Max (动态规划)
- hdu 1081 To The Max (动态规划)
- To the Max(动态规划DP)
- POJ 1050 To the Max -- 动态规划
- To the Max-动态规划 树状数组
- HDU 1081 To The Max 动态规划
- poj1050 To the Max (动态规划)
- java rmi 远程调用实现
- 洛谷P1064 金明的预算方案
- Python中的模块
- SCAUOJ——17235-Minecraft是个好游戏
- python部分实用快捷键
- Ural 1087|The Time to Take Stones|博弈论|动态规划
- 安装caffe中间遇到的一些问题
- CodeForces
- GoogleTest的使用
- 工厂模式
- oracle中pl/sql编程(五)
- Java 格式化输出到文件
- TCP/IP详解(协议)读书笔记之第二章链路层
- 若非群玉山头见,会向瑶台月下逢