牛客 草莓失踪 ###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 }
View Code

 

posted @ 2020-07-20 11:59  canwinfor  阅读(169)  评论(0)    收藏  举报