01背包求方案数裸题, 将所有的歌的长度都存到a数组中, 遍历a数组,一重循环遍历物品, 二重循环遍历空间
#include <iostream> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int N = 10010,mod = 1000000007; int k, A, X, B, Y; long long f[N]; int a[N]; int main() { cin >> k >> A >> X >> B >> Y; int n = X + Y; for(int i = 1; i <= X; i++) a[i] = A; for(int i = X + 1; i <= n; i++) a[i] = B; f[0] = 1; for(int i = 1; i <= n; i++) { for(int j = k; j >= a[i]; j--) { f[j] += f[j - a[i]]; f[j] %= mod; } } cout << f[k] <<endl; return 0; }