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;
 }