摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2516思路:网上大牛说是著名的斐波那契博弈模型:首先 2个石头肯定是必败点,3个石头也是必败点,然后开始看后面,4个石头时,可以去一个使对手到必败点,而对手在这种情况下在必败点是不能赢得,所以4是必胜点。但是后面5个石头的情况就不同了,因为5个石头 你肯定不会sb的走到4这个必胜点让对手赢, 但是你发现走到3时,在3这个位置可以直接获胜。 所以5是必败点。View Code 1 #include<iostream> 2 #include<cstdio> 3 using nam 阅读全文
posted @ 2013-05-09 23:54 ihge2k 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1847思路:首先我们知道3是必败点,然后类似于巴什博弈,直接对n%3考虑就行了。View Code 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 int main(){ 6 int n; 7 while(~scanf("%d",&n)){ 8 n%3==0?puts("Cici"):puts("Kiki"); 9 }10 阅读全文
posted @ 2013-05-09 23:32 ihge2k 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1907思路:尼姆博弈变形。View Code 1 #include<iostream> 2 using namespace std; 3 4 int main(){ 5 int _case; 6 scanf("%d",&_case); 7 while(_case--){ 8 int n,x,sum=0,count=0; 9 scanf("%d",&n);10 for(int i=1;i<=n;i++){11 ... 阅读全文
posted @ 2013-05-09 19:47 ihge2k 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3987思路:我们知道最小割是不唯一的,这里要我们求割边最少的最小割,比较好做法有:第一种:建边的时候每条边权 w = w * (E + 1) + 1;这样得到最大流 maxflow / (E + 1),最少割边数 maxflow % (E + 1) 道理很简单,如果原先两类割边都是最小割,那么求出的最大流相等但边权变换后只有边数小的才是最小割了乘(E+1)是为了保证边数叠加后依然是余数,不至于影响求最小割的结果第二种:建图,得到最大流后,图中边若满流,说明该边是最小割上的边 再建图,原则:满流的边改 阅读全文
posted @ 2013-05-09 14:57 ihge2k 阅读(726) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2149首先介绍一下巴什博奕(BashGame):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。分析:显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获 阅读全文
posted @ 2013-05-09 14:21 ihge2k 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3452思路:一颗带边权的树,最小割求树根和叶子结点不连通。可设汇点为n+1,注意只用叶子结点才能和汇点连容量为inf的边。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<set> 6 using namespace std; 7 #define MAXN 2222 8 #define MAXM 阅读全文
posted @ 2013-05-09 13:58 ihge2k 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1579所谓记忆化,简单理解就是dfs+dp,水题不多说了。。。View Code 1 #include 2 #include 3 #include 4 using namespace std; 5 #define MAXN 55 6 int dp[MAXN][MAXN][MAXN]; 7 8 //记忆话搜索 9 int dfs(int a,int b,int c){10 if(a20||b>20||c>20)return dfs(20,20,20);12 if(dp[a][b][... 阅读全文
posted @ 2013-05-09 12:57 ihge2k 阅读(266) 评论(0) 推荐(0) 编辑