博弈DP
POJ 1082: Calendar Game
从最终状态向前dp即可。
注意如下两点:
1 需要保证前后的状态均合法,例如f[i,j,k+1]=>f[i,j,k]则需要保证(i,j,k+1)和(i,j,k)这两个日期都合法。
2 因为日期是增加,所以要从后往前推,即循环逆序。
代码如下
/*
*/
#define method_1
#ifdef method_1
/*
从最终状态向前dp即可。
注意如下两点:
1 需要保证前后的状态均合法,例如f[i,j,k+1]=>f[i,j,k]则需要保证(i,j,k+1)和(i,j,k)这两个日期都合法。
2 因为日期是增加,所以要从后往前推,即循环逆序。
*/
#include
#include
#include
#include
#include
#include
POJ 2068: Nim
题解链接 http://www.mamicode.com/info-detail-2131299.html
代码如下
/*
*/
#define method_1
#ifdef method_1
/*
题解链接 http://www.mamicode.com/info-detail-2131299.html
*/
#include
#include
#include
#include
#include
#include
POJ 3688: Cheat in the Game
题解链接 http://www.hankcs.com/program/algorithm/poj-3688-cheat-in-the-game.html
注意每轮结束,石头数都会复原,因此博弈dp时每个卡片每轮中只能使用一次,即对应01背包的情况。
因为总共有四种状态(必败 必胜 非必败 非必胜)所以直接按照传统的转移会出现问题。
代码如下
/*
题解链接 http://www.hankcs.com/program/algorithm/poj-3688-cheat-in-the-game.html
注意每轮结束,石头数都会复原,因此博弈dp时每个卡片每轮中只能使用一次,即对应01背包的情况。
*/
#include
#include
#include
#include
#include
#include
POJ 1740: A New Stone Game
题解链接 https://www.cnblogs.com/s1124yy/p/5702694.html
代码如下
/*
题解链接 https://www.cnblogs.com/s1124yy/p/5702694.html
*/
#include
#include
#include
#include
#include
#include
Nim和Grundy数
POJ 2975: Nim
设所有元素异或和为XOR,a[i]是原先的值,XOR^a[i]是为了让抑或值为0,必须将a[i]变成的值。
如果a[i]>=(XOR^a[i]),则可以通过改变a[i]来使得局面达到一个必败状态。
代码如下
/*
*/
#define method_1
#ifdef method_1
/*
设所有元素异或和为XOR,a[i]是原先的值,XOR^a[i]是为了让抑或值为0,必须将a[i]变成的值。
如果a[i]>=(XOR^a[i]),则可以通过改变a[i]来使得局面达到一个必败状态。
*/
#include
#include
#include
#include
#include
#include
POJ 3537: Crosses and Crosses
题解链接 https://www.cnblogs.com/neighthorn/p/6441252.html
注意vis要声明为局部变量,因为它只在这一层中有效。
代码如下
/*
题解链接 https://www.cnblogs.com/neighthorn/p/6441252.html
注意vis要声明为局部变量,因为它只在这一层中有效。
*/
#include
#include
#include
#include
#include
#include
POJ 2315: Football Game
题解链接 http://www.hankcs.com/program/algorithm/poj-2315-football-game.html
代码如下
/*
*/
#define method_1
#ifdef method_1
/*
题解链接 http://www.hankcs.com/program/algorithm/poj-2315-football-game.html
*/
#include
#include
#include
#include
#include
#include