问题描述
UOI要吃鱼丸。很多很多的鱼丸……你可以近似认为是无穷多。他可以一口吃1个,也可一口吃3个,可是他不想变2,所以从来不一口吃2个。UOI想知道,吃N个鱼丸有多少种方法。
输入格式
第一行一个整数N表示鱼丸的个数。
输出格式
一个整数表示吃鱼丸的方法数。
样例输入
3
样例输出
2
数据规模和约定
1<=N<=70
题目一看,可以想到为完全背包问题,鱼丸个数为背包,吃的个数为价值,定义dp【j】
dp【j】:代表背包j 装满的方法数;
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[2]={1,3};
int n;
cin>>n;
vector<long long> dp(n+1,0);
dp[0]=1;
for(int j=0;j<=n;j++){
for(int i=0;i<2;i++){
if(j>=a[i]){
dp[j]+=dp[j-a[i]];
}
}
}
cout<<dp[n];
return 0;
}