Acwing 3433. 吃糖果

3433. 吃糖果 - AcWing题库

名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 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 
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;
}

你可能感兴趣的:(算法,动态规划,c++,数据结构)