名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力)。
妈妈告诉名名每天可以吃一块或者两块巧克力。
假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。
例如:如果 N=1,则名名第 1 天就吃掉它,共有 1 种方案;如果 N=2,则名名可以第 1天吃 1 块,第 2 天吃 1 块,也可以第 1 天吃 2块,共有 2 种方案;如果 N=3,则名名第 1 天可以吃 1 块,剩 2 块,也可以第 1 天吃 2 块剩 1 块,所以名名共有 2+1=3 种方案;如果 N=4,则名名可以第 1 天吃 1 块,剩 3 块,也可以第 1 天吃 2 块,剩 2 块,共有 3+2=5 种方案。
现在给定 N,请你写程序求出名名吃巧克力的方案数目。
输入格式
输入只有 1 行,即整数 N。
输出格式
输出名名吃巧克力的方案数目。
数据范围
1≤N≤20
输入样例:
4
输出样例:
5
思路:
枚举几个就能得到递推公式,如下:
dp[i] = dp[i - 1] + dp[i - 2]
套公式即可
#include <bits/stdc++.h>
using namespace std;
const int N = 21;
int dp[N];
int main() {
int n = 0;
cin >> n;
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
cout << dp[n] << endl;
return 0;
}