洛谷1757(分组背包)

洛谷1757(分组背包)_第1张图片

#include
#include
#include
#include
#include
using namespace std;
const int maxn = 110;
vector w[maxn];
vector v[maxn];
int dp[1100];
int n, m;

int main()
{
    cin >> m >> n;
    int a, b, c;
    int g = 0;
    for(int i = 0; i < n; i++)
    {
        scanf("%d%d%d", &a, &b, &c);
        w[c].push_back(a);
        v[c].push_back(b);
        g = max(g, c);
    }

    for(int i = 1; i <= g; i++)        //组数
    {
        for(int j = m; j >= 0; j--)    //容量一维逆序
        {
            for(int k = 0; k < w[i].size(); k++)    //每组件数
            {
                int tw = w[i][k];
                int tv = v[i][k];
                if(j >= tw)
                    dp[j] = max(dp[j], dp[j - tw] + tv);
            }
        }
    }
    cout << dp[m] << endl;
    return 0;
}

 

你可能感兴趣的:(算法题集)