发新话题
打印

[C] 取石头游戏----高难度的算法题

取石头游戏----高难度的算法题

C语言的取石头游戏,----超高难度的算法题

有甲乙两个人玩取石子游戏,共有n个石子(1<=n<=30000)两个人轮流取,甲先取.每次最多取m个(1<=m<=30000)最少取一个,当轮到谁取的时候没有石子了,谁就赢.
  比如4个石子,每次最多取3个,那末先取的人(甲)一定赢n和m谁大没有限制.)
  (甲拿走3个,乙只拿走1个,下面轮到甲了,但是没有石子了,甲赢了.)
 现在要求你写一个程序,输入n(总的石子个数),最多可以取的石子个数m,输出甲(先取的人)是否会赢,会赢的话输出YES,否则输出LOSE.
 我们这里假设甲乙两个人都采取最好的策略,也就是甲乙都非常想赢而且足够聪明.
 比如输入4 3 输出YES

求算法和程序示例!!!

TOP

~~~~~
引用:
#include<stdio.h>

#define
MAXN 30000
int a[MAXN+1];

int DPfun(int n,int m)
{
int i,k;
if(n==1)
return false;
else if( m>=(n-1) )
return true;
else{
a[1]=0;
for(i=2;i<=(m+1);i++)
a[i]=1;
for(i=(m+2); i<=n; i++)
{
for(k=1;k<=m && a[i-k];k++);
if(k>m)
a[i]=0;
else
a[i]=1;
}
return a[n];
}
}

int main()
{
int n,m;
scanf("%d %d", &n,&m);
if(DPfun(n,m))
printf("YES\n");
else
printf("LOSE\n");

return 0;
}
本帖最近评分记录
  • 简单哈一 爱心 +1 2007-5-27 22:39
  • Liangent 现金 +5 帮助别人也就是帮助自己 2007-5-27 16:34

TOP

这个和我看的一个国外游戏轮流拿游戏币,性质是一样的.国外的人采用的是递归回溯法 ,而且是人机对战的.我看了好久看懂一小点.改天有空把程序上传上来大家学习学习

TOP

回复 #3 vorvorpp 的帖子

好的,改天传上来,对比一下效率和算法,学习一下。期待中………………

联系QQ:164697154

TOP

一点都不难,一个简单的动态规划。

TOP

学习ing...:s001:
http://haoji.name/

雷当http://leidown.com

TOP

怎么三楼没后话呢???我还想看看呢。。、
本帖最近评分记录

TOP

n=k*(m+1)+1则乙赢否则甲赢(k为整数)

TOP

发新话题