P1757[分组背包]

题目地址

一道分组背包但是要改输入方式


#include <iostream>
#include <cstring>

using namespace std;
const int N = 1001;
int m,n;
int f[N],v[N],w[N],b[N];
int g[350][350];
int main()
{
    scanf("%d%d",&m,&n);
    int t = -1,x;
    for(int i = 1 ;i <= n ; i ++ )
    {
        scanf("%d%d%d",&v[i],&w[i],&x);
        t = max(x,t);
        b[x]++;//映射到w,v的值
        g[x][b[x]] = i;

    }



    for (int i = 1; i <= t; i++)
        for (int j = m; j >= 0; j--)
            for (int k = 1; k <= b[i]; k++)
                if (j >= v[g[i][k]])
                    f[j] = max(f[j], f[j - v[g[i][k]]] + w[g[i][k]]);//映射到w,v的值

    printf("%d\n",f[m]);
}
posted @ 2022-07-14 16:58  Erfu  阅读(25)  评论(0编辑  收藏  举报