类似于花生米(三)的取石子问题
来源:互联网 发布:外贸 知乎 编辑:程序博客网 时间:2024/09/21 06:38
//题目:有n个石子 两个人交替取石子 第一次取一个 以后每一次取的石子不超过前一个的二倍 先去完的胜利
#include<iostream>
using namespace std;
int main()
{
int l[100][100];//l[i][j]表示剩余n个石子 这一次最多取j个 因为是最多取j个 所以要用k列举1~j的所有情况
int i,j,k,flag,n;
cin>>n;
l[1][1]=1;
for(i=2;i<=n;i++)
{
for(j=1;j<i;j++)//j一定要小于i 因为j>=i的话一次就ok了 没有意义了
{ //计算l[i][j]
flag=0;//先立个flag 如果找到了上一步为0 flag变成1 否则flag还是0
for(k=1;k<=j;k++)//开始列举l[i][1~j]的所有情况
{
if(2*k>=i-k)//如果我取了之后对方 一次没错一次就取完了 涉及到的是没有计算的l[i][j] 那么我就失败了
{
break;
}
if(l[i-k][2*k]==0)//如果找到了上一步为0的情况那么我就胜利了
//很多人包括我会疑惑为什么一步就判断出来了 也就是为什么[2*k]会这么神奇 没错它就是这么神奇
//因为对方足够聪明 如果最大的k还不能取到1 那么他就失败了
//按照该算法 每次都会列举一下 尽可能的使flag=1
{
flag=1;
break;
}
}
l[i][j]=flag;
}
}
cout<<l[n][1]<<endl;
return 23;
}
#include<iostream>
using namespace std;
int main()
{
int l[100][100];//l[i][j]表示剩余n个石子 这一次最多取j个 因为是最多取j个 所以要用k列举1~j的所有情况
int i,j,k,flag,n;
cin>>n;
l[1][1]=1;
for(i=2;i<=n;i++)
{
for(j=1;j<i;j++)//j一定要小于i 因为j>=i的话一次就ok了 没有意义了
{ //计算l[i][j]
flag=0;//先立个flag 如果找到了上一步为0 flag变成1 否则flag还是0
for(k=1;k<=j;k++)//开始列举l[i][1~j]的所有情况
{
if(2*k>=i-k)//如果我取了之后对方 一次没错一次就取完了 涉及到的是没有计算的l[i][j] 那么我就失败了
{
break;
}
if(l[i-k][2*k]==0)//如果找到了上一步为0的情况那么我就胜利了
//很多人包括我会疑惑为什么一步就判断出来了 也就是为什么[2*k]会这么神奇 没错它就是这么神奇
//因为对方足够聪明 如果最大的k还不能取到1 那么他就失败了
//按照该算法 每次都会列举一下 尽可能的使flag=1
{
flag=1;
break;
}
}
l[i][j]=flag;
}
}
cout<<l[n][1]<<endl;
return 23;
}
阅读全文
0 0
- 类似于花生米(三)的取石子问题
- 取石子(花生米三)
- C语言取花生米(取棋子)系列问题。从一堆中轮流取的情况。
- 取石子(三)
- 可同时从多堆石子里取石子的取石子问题
- Nim取石子问题
- 取石子问题
- 取石子问题
- 取石子问题
- 取石子问题
- 取石子问题
- 取石子问题
- ACM取石子问题
- 取石子问题
- 取石子问题
- 取石子问题
- 取石子问题
- 取石子问题
- ssl示例和流程
- 机器学习-朴素贝叶斯法笔记
- JAVA: equals 思考
- GIT学习笔记(2)
- hi CSDN
- 类似于花生米(三)的取石子问题
- SpringMVC框架搭建并整合MyBatis
- java Collections工具类的 一些功能(查找,最值,乱序,逆序,排序,交换,替换,让集合线程同步)
- 【观察】从数据中国到智能计划 曙光三级跳的创新价值
- centos(3)-putty/winscp远程控制
- 【Web浏览器】解决stackoverflow打开慢
- 顺序表的基本操作
- SpringBoot知识汇总
- 文章标题