洛谷1757(分组背包)

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 110;
vector<int> w[maxn];
vector<int> 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;
}

猜你喜欢

转载自blog.csdn.net/qq_38577732/article/details/89576469
今日推荐