题目链接:https://syzoj.com/problem/71
内存限制:128 MiB 时间限制:1000 ms

题目描述

Chenyao现在有n块巧克力,作为单身狗的他决定吃巧克力自杀,但是又不想一下子挂掉,所以他决定每天只吃1块巧克力或者2块巧克力,Chenyao如果要吃完这n块巧克力,有多少种方案。
例如他如果只有1块巧克力的话,那么他只有1种吃巧克力的方案,那就是1天把这1块吃完
如果他有2块巧克力的话,他有2种吃巧克力的方案,就是1天2块吃完或者2天1天1块
那么现在输入n,表示Chenyao有n块巧克力,请问Chenyao有几种吃完巧克力的方案

输入格式

一个正整数n。

输出格式

一个整数,他吃完n块巧克力的方案数。

样例输入

2
3

样例输出

2
3

样例解释

样例一:
共两种方案:两天每天一块巧克力;或者一天吃两块巧克力。
样例二:
共三种方案:三天每天一块巧克力;第一天吃两块第二天吃一块;第一天一块第二天两块。

数据范围与提示

1 <= n <= 40

解题思路

f[i]表示吃i块的方案数,那么他要想吃i块可以前一天总共吃i-1块然后,这一天吃1块,或者前一天总共吃i-2块,然后这一天吃2块,类似于兔子繁殖。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, f[45];
    scanf("%d", &n);
    for (int i = 0; i < 4; i++)
        f[i] = i;
    for (int i = 4; i <= n; i++)
        f[i] = f[i - 1] + f[i - 2];
    printf("%d\n", f[n]);
    return 0;
}