题目浏览
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
UOI要吃鱼丸。很多很多的鱼丸……你可以近似认为是无穷多。他可以一口吃1个,也可一口吃3个,可是他不想变2,所以从来不一口吃2个。UOI想知道,吃N个鱼丸有多少种方法。
输入格式
第一行一个整数N表示鱼丸的个数。
输出格式
一个整数表示吃鱼丸的方法数。
样例输入
3
样例输出
2
数据规模和约定
1<=N<=70
算法浏览
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 75;
int n;
long long dp[N];
int main()
{
cin >> n;
dp[0] = 1;
dp[1] = 1;
dp[2] = 1;
dp[3] = 2;
for(int i = 4; i <= n; i++)
dp[i] = (dp[i - 1] + dp[i - 3]);
cout << dp[n] << endl;
return 0;
}
核心思路
经典的动态规划的问题
dp[i] :吃 i 个鱼丸的方法数
吃到第 i 个鱼丸可以由吃到第 i - 1 个和第 i - 3 个鱼丸推导过来,由于求的是count,数量,所以为两个状态相加