描述
有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。

请判定 先手玩家 必胜还是必败?
题目链接:https://www.lintcode.com/problem/394/
方法一:递归

#include "iostream"
using namespace std;
bool s(int n);
bool f(int n){//如果剩下1或者2个硬币,先手赢。if(n == 1 || n == 2){return true;}//先手可能拿一个或两个,如果后手拿完返回有一个是true,那么先手赢。return s(n - 1) || s(n - 2);
}
bool s(int n){//如果剩下1或者2个硬币,先手赢。if(n == 1 || n == 2){return false;}//后手可能拿一个或两个,如果先手拿完返回有一个是false,那么后手赢return f(n - 1) && f(n - 2);
}
int main(){int n;cin >> n;cout << f(n) << endl;
}

方法二:dp,时间复杂度(O(n))

class Solution {public:/*** @param n: An integer* @return: A boolean which equals to true if the first player will win*/bool firstWillWin(int n) {// write your code hereif(n == 0){return false;}int f[n + 1];int s[n + 1];f[1] = true;f[2] = true;s[1] = false;s[2] = false;for(int i = 3; i <= n; i++){f[i] = s[i - 1] || s[i - 2];s[i] = f[i - 1] && f[i - 2];}return f[n];}
};

方法三:发现规律,时间复杂度(O(1))

class Solution {public:/*** @param n: An integer* @return: A boolean which equals to true if the first player will win*/bool firstWillWin(int n) {// write your code herereturn !(n % 3 == 0);}
};

硬币排成线-LintCode相关推荐

  1. 面试题之硬币排成线java极简解法

    问题描述:有 n 个硬币排成一条线.两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止.拿到最后一枚硬币的人获胜. 请判定 第一个玩家 是输还是赢? 该题为一道典型的动态规划题,但此处 ...

  2. java 行为参数化_Java中的行为参数化

    java 行为参数化 The past isn't here anymore, the future cannot be seen and the only thing permanent is th ...

  3. leetcode lintcode python

    目录 1.Two Sum(Hash Table) Given an array of integers,return indices of the two numbers such that they ...

  4. oracle数据库批量操作系统,Oracle批量操作数据库

    [转]ASP.NET MVC学习笔记-Controller的ActionResult 1. 返回ViewResult public ActionResult Index()   {       Vie ...

  5. 九章算法高频算法题 题解

    专栏 | 九章算法 网址 | http://www.jiuzhang.com Google 面试题: Google 面试题 | 目标和 Google 面试题 | 建邮局 Google 面试题 | 0与 ...

  6. 天池在线编程 2020年9月26日 日常周赛题解

    文章目录 1. K步编辑 2. 折纸 3. 字符串的不同排列 4. 硬币排成线 题目地址,请点这 1. K步编辑 给出一个只含有小写字母的字符串的集合以及一个目标串(target),输出所有可以经过不 ...

  7. LintCode 题解 |Google 面试题:Take Coins

    题目描述 有n个硬币排成一排,每次要你从最左边或者最右侧拿出一个硬币.总共拿k次.写一个算法,使能拿到的硬币的和最大. 思路点拨 将list的前缀和求出来,然后依次枚举右边取x个,那么剩下就是左边去k ...

  8. Educoder实验五硬币抽选问题

    任务说明 本关任务:编写动态规划法算法,求解硬币抽选问题. 相关知识 为了完成本关任务,你需要了解实验目的和实验内容. 实验目的 (1)熟悉动态规划法的基本设计思想. (2)掌握动态方程的推导过程. ...

  9. CleanCodeHandbook Chapter 8: Dynamic Programming(42-47)

    Dynamic Programming 文章目录 Dynamic Programming leetcode70.Climbing Stairs leetcode62. Unique Paths lee ...

最新文章

  1. 原创 人物志|山东省临沭县 - 一位身残志坚的奋斗青年 - 吴忠军
  2. 再见,HttpClient!再见,Okhttp!
  3. grep,但只有特定的文件扩展名
  4. 大数据学习——MapReduce学习——字符统计WordCount
  5. storm后台启动命令(避免新开窗口)
  6. 解读浮动闭合最佳方案:clearfix
  7. java 省市区三级联动_AJAX省市区三级联动下拉菜单(java版)
  8. java生成pdf417_生成PDF417的JAVA包.rar
  9. 【es】es 的 Setting和Environment
  10. bartender实现即扫即打印功能扫描完后自动打印_日本彩色激光打印机推荐人气排名15款...
  11. .net 有哪些主流的设计模式_「设计模式自习室」门面模式 Facade Pattern
  12. H5 --力导向图、关系图谱
  13. HDU2048 神、上帝以及老天爷【递推】
  14. 机器视觉硬件之工业相机(一)
  15. 饥荒联机版服务器搭建_饥荒联机版steam专用服务器快速搭建教程
  16. Processor Architecture: CISC, RISC, VLIW
  17. css中“~”(波浪号)、“,”(逗号)、“+”(加号)和“”(大于号)详解
  18. 代码健壮性的几点思考
  19. 从校园人到职业人的转变
  20. 人工神经网络的算法原理,神经网络算法的原理是

热门文章

  1. mysql的load data_【MySQL】load data语句详解(一)
  2. 【L2-040 哲哲打游戏】天梯赛L2题集
  3. 月薪8000的出租车司机给我上了震撼一课...
  4. python新手代码
  5. SD Formatter
  6. JavaWeb开发调用支付宝接口实现在线支付(整个支付过程从头到尾)
  7. Twitter实现每秒处理3000张(20G)图片的优化实践
  8. 关于无线通信的简单理解
  9. 性能测试——深圳个贷营销项目出差总结
  10. windows“找不到msvcp120.dll ”或“msvcp120.dll 缺失