1.时限:1000ms 内存限制:10000K  总时限:3000ms

描述
五一长假第二天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(这个仓库还真奇怪)。这次Tom制定分花生米规则如下:
       1、Tom和Jerry轮流从堆中取出k粒花生米吃掉,k可以是1,5,10中的任意一个数字;
       2、为显示规则的公平性,Jerry可以选择先取或者后取。
Jerry当然还是希望最后一粒花生米被Tom吃掉。请计算,Jerry为了达到目的应该先取还是后取。
输入
本题有多个测例,每个测例的输入是一个整数n,n大于零小于等于1000,代表花生米的数量。
n等于0表示输入结束,不需要处理。
输出
每个测例在单独的一行内输出一个整数:Jerry先取输出1;Tom先取输出0。
输入样例
1
2
3
4
0
输出样例
0
1
0
1
提示
来源

2.时限:1000ms 内存限制:10000K  总时限:3000ms

描述
五一长假第三天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(仓库,又见仓库……)。这次Tom制定分花生米规则如下:
???????1、Tom和Jerry轮流从堆中取出k粒花生米吃掉;
2、第一次取花生米的人只能取一粒,以后取花生米的数量不能超过前一个人取花生米数量的两倍;
3、为显示规则的公平性,Jerry可以选择先取或者后取。
Jerry当然还是希望最后一粒花生米被Tom吃掉。请计算,Jerry为了达到目的应该先取还是后取。
输入
本题有多个测例,每个测例的输入是一个整数n,n大于零小于等于1000,代表花生米的数量。
n等于0表示输入结束,不需要处理。
输出
每个测例在单独的一行内输出一个整数:Jerry先取输出1;Tom先取输出0。
输入样例
1
2
3
4
5
0
输出样例
0
1
0
0
1
提示
来源

3.时限:1000ms 内存限制:10000K  总时限:3000ms

描述
五一长假第六天,Tom在QQ上遇到了Kitty。呵呵,Kitty,在离散数学课上认识的PPMM……等等!Tom恍然大悟:自己这一生除了看帖不回之外最大的错误就是离散数学没学好!
五一长假第七天,Tom和Jerry在仓库散步的时候发现了一堆花生米(仓库,呵呵,仓库…)。这次Tom制定分花生米规则如下:
???????1、首先选出最苦的一粒花生米,放到一个瓶子里;
???????2、把剩下的花生米做成花生酱,Tom和Jerry轮流取一些花生酱吃掉;
???????3、第一个取的人只能取1.0克,以后取花生酱的数量不能少于两个人已经取过的总数量且不能超过两个人已经取过的总数量的三倍;
?????? 4、不能按规则3取花生酱的人必须吃掉瓶子里的花生米;
?????? 5、为显示规则的公平性,Jerry可以选择先取或者后取。
Jerry当然希望瓶子里的花生米被Tom吃掉。请计算,Jerry为了达到目的应该先取还是后取。
输入
本题有多个测例,每个测例的输入是一个浮点数w,w大于1.0小于等于1000.0,w最多只有一位小数,代表花生酱的数量,单位为克。
w小于0表示输入结束,不需要处理。
输出
每个测例在单独的一行内输出一个整数:Jerry先取输出1;Tom先取输出0。
输入样例
1.5
7.9
-1
输出样例
1
0
提示
来源

三道题都是相似的动态规划,在考虑第i步的策略的时候要考虑前几步的状态。
要注意的是,如果前几步全是JERRY赢,那么这一步让TOM来去,如果有TOM赢得可能,那就必须JERRY取,因为TOM是在乱取的,而JERRY是有策略的。
#include <iostream>
#include <stdio.h>int main()//1
{int i, n;bool dp[1002];//tom是ture,jerry是falsedp[1] = true;i = 2;for (i = 2; i <= 1000; i++){if (i - 1 >= 1 && i - 5 < 1){if (dp[i - 1] == false){dp[i] = true;}else{dp[i] = false;}}else if (i - 5 >= 1 && i - 10 < 1){if (dp[i - 1] == false && dp[i - 5] == false){dp[i] = true;}else{dp[i] = false;}}else if (i - 10 >= 1){if (dp[i - 1] == false && dp[i - 5] == false && dp[i - 10] == false){dp[i] = true;}else{dp[i] = false;}}}while (1){scanf("%d", &n);if (n == 0){break;}else{if (dp[n] == true){printf("0\n");}else{printf("1\n");}}}return 0;
}
#include <stdio.h>
#include <iostream>using  namespace std;//2bool dp[2002][2002];//tom为true,jerry为falsevoid figure(int a, int b)
{int i, flag;if (b == 1){if (dp[a - 1][2] == false){dp[a][1] = true;}else{dp[a][1] = false;}}else if (a == b + 1)//刚好位于对角线下一格的话依然jerry,因为dp[n][n-1]总能跳转到tom上{dp[a][b] = false;}else if (b>1){flag = 0;for (i = 1; i <= b && 2 * i < a; i++){if (dp[a - i][2 * i] == true)//状态转移到了tom上{flag = 1;dp[a][b] = false;break;}}if (flag == 0)//状态转移不到tom上{dp[a][b] = true;}}return;
}int main()
{int i, j, n;for (i = 1; i <= 1001; i++){dp[i][i] = false;//对角线全jerrydp[1][i] = true;dp[2][i] = false;}for (i = 3; i <= 1000; i++){for (j = 1; j < i; j++){figure(i, j);//探讨dp[i][j]的状态}}while (1){scanf("%d", &n);if (n == 0){break;}else{if (dp[n][1] == true){printf("0\n");}else{printf("1\n");}}}return 0;
}
#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;//3char dp[10002];int main()
{int i, n, die, k, flag, j;double x;while (1){memset(dp, 0, sizeof(dp));scanf("%lf", &x);if (x < 0){break;}n = (int)(x * 10);if (n <= 10){printf("1\n");continue;}die = n / 2;for (i = 1; i <= die - 1 ; i++){dp[i] = 'T';//低于花生酱数量一半的应该全都是tom}if (n % 2 == 1){dp[i] = 'T';}else{dp[i] = 'J';}for (i = die + 1; i <= n - 10; i++){k = n - i;//k表示已经吃掉的数量flag = 0;//先假设没找到Tif (i <= 3 * k){for (j = 1; j <= i - k; j++){if (dp[j] == 'T'){flag = 1;//找到了Tdp[i] = 'J';break;}}}else{for (j = i - 3 * k; j <= i - k ; j++){if (dp[j] == 'T'){flag = 1;dp[i] = 'J';break;}}}if (flag == 0){dp[i] = 'T';}}if (dp[n - 10] == 'T'){printf("1\n");}else if (dp[n - 10] == 'J'){printf("0\n");}}return 0;
}

花生米三连发(动规)相关推荐

  1. 关于数位动规(入门到进阶,难度中档)

    数位动规,就是对于数位进行动规(日常一句废话···) 刚好今天听数位dp,就总结一下最近写的题吧.郭神说要学懂数位dp,还是要搞懂它内部是怎么工作的.比如一个有大小的数,我们在这里剥夺它作为一个整数的 ...

  2. CF2B The least round way(贪心+动规)

    题目 CF2B The least round way 做法 后面\(0\)的个数,\(2\)和\(5\)是\(10\)分解质因数 则把方格中的每个数分解成\(2\)和\(5\),对\(2\)和\(5 ...

  3. 树形动规_(技能树)

    技能树(SGOI) skill.pas/c/cpp [问题描述] 玩过 Diablo 的人对技能树一定是很熟悉的.一颗技能树的每个结点都是一项技能,要学会这项技能则需 要耗费一定的技能点数.只有在学会 ...

  4. 正则表达式匹配(动规)

    文章目录 题目 思路 转移方程 特征 再探 i 和 j 代码 题目 请实现一个函数用来匹配包含 . 和 * 的正则表达式.模式中的字符 . 表示任意一个字符,而 * 表示它前面的字符可以出现任意次(含 ...

  5. 洛谷 P1073 最优贸易 (分层图状态转移+SPFA,求最长路径;另附某dalao的超短代码:暴力+动规)

    题目链接1 题目链接2 另附某dalao的超短代码:暴力+动规 P1073 最优贸易 题目描述 C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市. 任意两个城市之间最多只有 ...

  6. leetcode 121. 买卖股票的最佳时机 (贪心 + 动规 + 双指针

    贪心的思路: 得到最小值,再挨个用数组中的值减去最小值,最终值取一个最大的 class Solution { public:int maxProfit(vector<int>& p ...

  7. 导弹拦截(动规,贪心)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  8. BTTCOJ 问题 G: 逃离地牢 树形动规

    题目描述 小明明又被大威鱼抓住了,大威鱼把小明明关在地牢里,地牢由n * n 个房间组成,小明被困在地牢的最左上角的房间中,出口在最右下角,他想逃出这个诡异的地牢,但是他只能向下或者向右走. 小明每经 ...

  9. bzoj3875 【Ahoi2014】骑士游戏 spfa处理后效性动规

    骑士游戏 [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,JYY一共有两种攻 ...

  10. bzoj3875: [Ahoi2014Jsoi2014]骑士游戏 spfa处理有后效性动规

    bzoj3875: [Ahoi2014&Jsoi2014]骑士游戏 Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的 ...

最新文章

  1. 在linux CentOS 上安装chrome 谷歌浏览器
  2. CENTOS MINI版安装tomcat9.0
  3. MySQL Replication--复制异常1
  4. centos 安装 MatConvNet (gpu)
  5. java声明和初始化数组_Java 中初始化数组
  6. Visual Studio 2010 调试 C 语言程序
  7. python例题代码_python26个练习题及代码-789
  8. mysql中distinct走索引吗_MySQL中索引优化distinct语句及distinct的多字段操作
  9. error: exception handling disabled, use -fexceptions to enable
  10. 做java项目_初学者做java项目的流程
  11. 文字时钟罗盘动态html代码_文字时钟罗盘动态html代码工具-文字时钟APP最新版下载-游戏窝...
  12. android 圆形进度条样式,Android编程之ProgressBar圆形进度条颜色设置方法
  13. layui修改头像功能
  14. 使用c#制作赛尔号登录器
  15. linux下字符终端某些按键无法输入解决方法
  16. 【数学模型】基于Matlab模拟超市排队系统
  17. 《如何阅读一本书》读书计划
  18. 新浪微博 redis mysql_新浪微博:史上最大的Redis集群
  19. 如何设置微信公众号在被添加关注之后, 自动回复文字和图片两条消息
  20. Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程(1)

热门文章

  1. 互联网访问检测服务器
  2. WCF学习(二):契约
  3. oracle adf源代码在哪里,第 3 章 | 从设计到实践全面了解 Oracle ADF 应用程序
  4. 语音合成:transformer tts 论文复现以及dockerfile
  5. Android----banner使用详解
  6. 英语专业,不想做老师,还能做什么工作?
  7. Windows下安装mysql的操作步骤
  8. 一元二次求解matlab程序,规范MATLAB编程实例——求解一元二次方程
  9. (附源码)springboot闲置衣物捐赠系统 毕业设计 021009
  10. tp3.2.3 图片打水印