牛客 草莓失踪 ###K ###K ###K //K
题目链接:https://ac.nowcoder.com/acm/problem/207651
思路: x 和y 可以转换成 完成背包求方案数, 相当于只有两种纸币 求组合的方案数
而 斐波那契 先枚举一遍单独加1即可 注意这是每个组合只能取一个所以不是转换成01背包
而且要在x和y处理前 先加上, 代表原有的方案数
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+10; 4 const int mod=998244353; 5 #define ll long long 6 #define pb push_back 7 #define pi pair<int,int> 8 #define fi first 9 #define sc second 10 11 int dp[maxn]; 12 int f[35]; 13 14 15 int main() 16 { 17 ios::sync_with_stdio(0); 18 cin.tie(0); 19 f[0]=0,f[1]=1; 20 for(int i=2;i<=30;i++) 21 f[i]=f[i-1]+f[i-2]; 22 23 int n,x,y; 24 cin>>n>>x>>y; 25 dp[0]++; 26 for(int i=2;i<=30;i++) 27 dp[f[i]]++; 28 for(int i=x;i<=n;i++) 29 dp[i]+=dp[i-x]; 30 for(int i=y;i<=n;i++) 31 dp[i]+=dp[i-y]; 32 33 34 35 for(int i=0;i<=n;i++) 36 { 37 if(i!=0) 38 cout<<" "; 39 cout<<dp[i]; 40 } 41 cout<<'\n'; 42 43 44 45 46 }

浙公网安备 33010602011771号