憋了半天,憋了一个完全背包做法,再去看题解,心态炸裂。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n;
int w[2] = {4,5};
int v[2] = {0,1};
int f[1000005],g[1000005];
int main(){
cin >> n;
memset(f,0x80,sizeof(f));
f[0] = 0 , g[0] = 1;
for(int i = 0;i < 2;i++) {
for(int j = w[i];j <= n;j++) {
if(f[j-w[i]] >= 0 && f[j] <= f[j-w[i]] + v[i]) {
f[j] = f[j-w[i]] + v[i];
g[j]+= g[j-w[i]];
}
}
}
cout << g[n];
return 0;
}