【题目链接】

OpenJudge NOI 2.6 1944:吃糖果
注:ybt 1193:吃糖果 页面打不开,可以在OpenJudge做该题。

【题目考点】

1. 递推/递归

2. 搜索

【解题思路】

解法1. 递推

  • 递推状态:a[i]:吃i个巧克力的方案数
  • 初始状态:
    • 要吃1块巧克力,方案数为1:a[1] = 1
    • 要吃2块巧克力,方案数为2:a[2] = 2
  • 递推关系:
    要想吃i个巧克力,先考虑第1天吃几块

    • 如果第1天吃1块巧克力,接下来吃i-1块巧克力的方案数为a[i-1],因此这种情况下的方案数为:a[i-1]
    • 如果第1天吃2块巧克力,接下来吃i-1块巧克力的方案数为a[i-2],因此这种情况下的方案数为:a[i-2]
    • 因此吃i个巧克力的方案数为a[i] = a[i-1] + a[i-2]

实际就是一个求斐波那契数列第n项的问题。

解法2:递归

n最大为20,使用普通递归或记忆化递归均可。

解法3:深搜

问题规模不大,用深搜也可以解该题

【题解代码】

解法1:递推

#include <bits/stdc++.h>
using namespace std;
int main()
{int n, a[25];cin >> n;a[1] = 1, a[2] = 2;for(int i = 3; i <= n; ++i)a[i] = a[i-1] + a[i-2];cout << a[n];return 0;
}

解法2:递归

  • 一般递归
#include <bits/stdc++.h>
using namespace std;
int solve(int k)//返回吃k个巧克力的方案数
{if(k <= 2)return k;return solve(k-1) + solve(k-2);
}
int main()
{int n;cin >> n;cout << solve(n);return 0;
}
  • 记忆化递归
#include <bits/stdc++.h>
using namespace std;
int a[25];//a[i]:吃i个巧克力的方案数
int solve(int k)//返回吃k个巧克力的方案数
{if(a[k] > 0)return a[k];if(k <= 2)return k;return a[k] = solve(k-1) + solve(k-2);
}
int main()
{int n;cin >> n;cout << solve(n);return 0;
}

解法3:深搜

#include <bits/stdc++.h>
using namespace std;
int ans;
void dfs(int a)//要吃a颗巧克力 统方案径数
{for(int i = 1; i <= 2; ++i)//这一次吃i个巧克力 {if(a-i == 0)ans++;//方案数加1    else if(a-i > 0)dfs(a-i);//看下一次吃几个 }
}
int main()
{int n;cin >> n;dfs(n);cout << ans;return 0;
}

信息学奥赛一本通 1193:吃糖果 | OpenJudge NOI 2.6 1944:吃糖果相关推荐

  1. 信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶

    [题目链接] ybt 1190:上台阶 OpenJudge NOI 2.3 3525:上台阶 注:ybt 1190最大数据数量为71,而OpenJudge 2.3 3525中最大数据数量为100.如果 ...

  2. 信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛

    [题目链接] ybt 1225:金银岛 OpenJudge NOI 4.6 1797:金银岛 [题目考点] 1. 贪心 2. 部分背包问题 [解题思路] 该题为部分背包问题 1. 贪心选择性质的证明: ...

  3. 信息学奥赛一本通 1226:装箱问题 | OpenJudge NOI 4.6 19:装箱问题

    [题目链接] ybt 1226:装箱问题 OpenJudge NOI 4.6 19:装箱问题 [题目考点] 1. 贪心 [解题思路] 该题说是三维立方体,实际上无论是包裹还是产品,高度都是h,因而不用 ...

  4. 信息学奥赛一本通 1216:红与黑 / OpenJudge NOI 2.5 1818

    [题目链接] ybt 1216:红与黑 OpenJudge NOI 2.5 1818:红与黑 [题目考点] 1. 连通块问题 2. 深搜/广搜 [解题思路] 1. 深搜 从第一个格子出发,遍历所有可以 ...

  5. 信息学奥赛一本通 1115:直方图 | OpenJudge NOI 1.9 09

    [题目链接] ybt 1115:直方图 OpenJudge NOI 1.9 09:直方图 [题目考点] 1. 散列存储 也叫哈希存储.其思想为:将要存储的值通过某种算法映射到存储地址,映射算法为散列函 ...

  6. 信息学奥赛一本通 1114:白细胞计数 | OpenJudge NOI 1.9 08

    [题目链接] ybt 1114:白细胞计数 OpenJudge NOI 1.9 08:白细胞计数 [题目考点] 1. 求数组中最大值及其下标 方法1:保存最大值和下标 设置临时最大值变量mx,mx的初 ...

  7. 信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯

    [题目链接] ybt 1109:开关灯 OpenJudge NOI 1.5 31:开关灯 [题目考点] 1. 模拟 2. 循环.数组 3. 用逗号分隔输出 设标志位:isFirst,表示现在输出的是否 ...

  8. 信息学奥赛一本通 1073:救援 | OpenJudge NOI 1.5 19:救援

    [题目链接] ybt 1073:救援 OpenJudge NOI 1.5 19:救援 [题目考点] 1. 直角坐标系下某点到原点的距离 点(x,y)(x,y)(x,y)到原点的距离d=x2+y2d = ...

  9. 信息学奥赛一本通 1070:人口增长 | OpenJudge NOI 1.5 14:人口增长问题

    [题目链接] ybt 1070:人口增长 OpenJudge NOI 1.5 14:人口增长问题 [题目考点] 1. 循环求幂 设变量r初始值为1:int r = 1; 循环n次每次循环中输入变量a, ...

最新文章

  1. UNIX--stat、fstat和lstat函数
  2. 删除 shiro url 上的JSESSIONID
  3. Linux数据报文接收发送总结4
  4. php接收arduino向服务器发来的请求
  5. titanium开发教程-04-10移动rows
  6. android打不开,android加入权限应用打不开
  7. linux 修改hba参数,更改Raid卡和HBA卡在linux下的启动顺序
  8. Python基本数据类型之字典
  9. 土地利用转移矩阵步骤
  10. 手机测试的主要测试内容
  11. xmlspy php,XML Spy实例代码详解(图)
  12. ROC-RK3328-CC开源主板运行LibreELEC系统
  13. Unity 多端游戏画面同步
  14. MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序
  15. TED演讲双语演讲稿:为什么我们很难做出理性的决定?
  16. MySQL练习题全部
  17. vba 保存word里面的图片_如何将Word表格保存为图片?这3种方法你用过没?
  18. Android 9.0 Launcher3 禁止首屏时钟AppWidget拖动到其他屏
  19. T67 silvaco deckbuild 调试窗口消失
  20. google三大论文

热门文章

  1. Install and run DB Query Analyzer 6.04 on Microsoft Windows 10
  2. mysql 与QT的连接
  3. 创建表空间时ora-01119和ora-27040的处理
  4. 利用Flex 和 PHP 生产 PDF.
  5. 数据科学最常用流程CRISP-DM,终于有人讲明白了
  6. 你真的懂数据分析吗?一文读懂数据分析的流程、基本方法和实践
  7. systemverilog硬件设计及建模_UVM方法学与设计模式(一):从OOP的本质,设计模式到设计原则...
  8. 聊聊redo log是什么?
  9. Java 8中字符串拼接新姿势:StringJoiner
  10. 如何玩转小程序+公众号?手把手教你JeeWx小程序CMS与公众号关联