上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 27 下一页
摘要: 这是一道Fibonacci’s Game (斐波那契博弈)斐波那契博弈模型,是ACM题中常见的组合游戏中的一种,大致上是这样的:有一堆个数为 n 的石子,游戏双方轮流取石子,满足:1. 先手不能在第一次把所有的石子取完;2. 之后每次可以取的石子数介于 1 到对手刚取的石子数的 2 倍之间(包含 1 和对手刚取的石子数的 2 倍)。约定取走最后一个石子的人为赢家,求必败态。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<algorithm& 阅读全文
posted @ 2012-04-18 16:05 wutaoKeen 阅读(200) 评论(0) 推荐(0)
摘要: 这是一道Nim博弈;这要要考虑就是全是1的情况;View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<cstdlib> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 int main( ) 8 { 9 int n,m,num;10 while( scanf( "%d",&n )==1 )11 {12 while( n-- )13 {14 scanf( &quo 阅读全文
posted @ 2012-04-18 00:11 wutaoKeen 阅读(216) 评论(0) 推荐(0)
摘要: 这也是一道巴什博弈;这题如果你是先手,考虑你的必胜态。注意,因为任何正整数都能写成若干个2的整数次方幂之和。由于规定只能取2的某个整数次方幂,只要你留给对手的牌数为3的倍数时,那么你就必赢,因为留下3的倍数时,对手有两种情况:1:如果轮到对方抓牌时只剩3张牌,对方要么取1张,要么取2张,剩下的你全取走,win! 2:如果轮到对方抓牌时还剩3*k张牌,对手不管取多少,剩下的牌数是3*x+1或者3*x+2。轮到你时,你又可以构造一个3的倍数。 所以无论哪种情况,当你留给对手为3*k的时候,你是必胜的。题目说Kiki先抓牌,那么当牌数为3的倍数时,Kiki就输了。否则Kiki就能利用先手优势将留给对 阅读全文
posted @ 2012-04-17 23:40 wutaoKeen 阅读(635) 评论(0) 推荐(0)
摘要: View Code 1 #include<stdio.h> 2 int main( ) 3 { 4 int Case , n , m; 5 scanf("%d" ,&Case ); 6 while( Case-- ) 7 { 8 scanf( "%d%d",&n,&m ); 9 if( n%( m + 1 )==0 )10 puts( "second" );11 else puts( "first" );12 } 13 return 0; 14 }这是一道简单的巴什博弈;所谓巴什 阅读全文
posted @ 2012-04-17 23:25 wutaoKeen 阅读(282) 评论(0) 推荐(0)
摘要: http://poj.org/problem?id=2420这个题是一道模拟退火题,但我用的是最小覆盖圆解决的;这是我认为写得比较好的文章,在这里与大家分享。这道题其实就是求一个最小外接圆圆心和半径。所求点即是圆心,距离就是半径。点集的最小外接圆,其实就是点集的最小圆覆盖,就是找一个最小的圆,将所有点覆盖掉。这道题的题意是求一个点,使得到点集的最远点距离最近,下边我用我的方式,不严谨的证明一下。先证明最小外接圆的圆心到其最远的点距离最近。可知最小外接圆上最少有两个点,如果是两个点,必然在一条直径上,否则就至少有三个点,且这三个点之间相对于圆心的夹角两两不超过180度。这点很好证明。如果不满足上 阅读全文
posted @ 2012-04-17 20:23 wutaoKeen 阅读(318) 评论(0) 推荐(0)
摘要: 只是一道NIM(尼姆博弈)题;尼姆博弈模型,是ACM题中常见的组合游戏中的一种,大致上是这样的:有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是必败态,无论谁面对(0,0,0) ,都必然失败;第二种必败态是(0,n,n),自己在某一堆拿走k(k ≤ n)个物品,不论k为多少,对方只要在另一堆拿走k个物品,最后自己都将面临(0,0,0)的局势,必败。仔细分析一下,(1,2,3)也是必败态,无论自己如何拿,接下来对手都可以把局势变为(0,n,n)的情形 阅读全文
posted @ 2012-04-16 21:47 wutaoKeen 阅读(874) 评论(0) 推荐(0)
摘要: 这题就是对http://acm.hdu.edu.cn/showproblem.php?pid=1527的扩充View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 #include<set> 8 #include<map> 9 #include<vector>10 using names 阅读全文
posted @ 2012-04-16 20:49 wutaoKeen 阅读(250) 评论(0) 推荐(0)
摘要: 只是我第一道博弈题,这个是威佐夫博弈所谓威佐夫博弈,是ACM题中常见的组合游戏中的一种,大致上是这样的:有两堆石子,不妨先认为一堆有 10,另一堆有 15 个,双方轮流取走一些石子,合法的取法有如下两种:1、在一堆石子中取走任意多颗;2、在两堆石子中取走相同多的任意颗;约定取走最后一颗石子的人为赢家,求必胜策略。两堆石头地位是一样的,我们用余下的石子数(a,b)来表示状态,并画在平面直角坐标系上。和前面类似,(0,0)肯定是 P 态,又叫必败态。(0,k),(k,0),(k,k)系列的节点肯定不是 P 态,而是必胜态,你面对这样的局面一定会胜,只要按照规则取一次就可以了。再看 y = x 上方 阅读全文
posted @ 2012-04-16 20:46 wutaoKeen 阅读(882) 评论(3) 推荐(0)
摘要: 该题要用分组背包做,这里就是要怎样处理0必须选,1最多选一个,2任意选的问题;这里我们就开个二维数组;f[i][j],i表示第组,j表示时间;当该组为0时,我们在该组的选择可以来自上一组的结果,也可以来自该组的结果;如果为1那么结果只能依赖上一组的结果,如果依赖本组那么就会造成该组会多选;为2是那就是一个01背包;View Code #include<cstdio>#include<iostream>#include<cstring>using namespace std;class node{public: int cost,happy;};class N 阅读全文
posted @ 2012-03-13 21:19 wutaoKeen 阅读(303) 评论(0) 推荐(0)
摘要: 该题是一道分组背包题;题意就是ACboy发最多M的时间能够得到最多效益;输入有N没课程,没门课程发费j天得到的效益是map[i][j];View Code #include<iostream>#include<cstdio>#include<cstring>using namespace std;int map[124][124];inline int Max( int a , int b ){ return a > b ? a : b; }int DP( int N , int M ){ int f[124][124] ={ 0 }; for( in 阅读全文
posted @ 2012-03-10 19:23 wutaoKeen 阅读(200) 评论(0) 推荐(0)
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 27 下一页