洛谷 P1757 通天之分组背包 分组背包

https://www.luogu.com.cn/problem/P1757
洛谷 P1757 通天之分组背包 分组背包_第1张图片思路:分组背包裸题。

#include
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pr pair
using namespace std;
typedef long long ll;

const int maxn=1005;

int n,m;
int dp[maxn],w[maxn],v[maxn];
vector<int> vec[maxn];

int main()
{
    int k=0,id;
    scanf("%d%d",&m,&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&w[i],&v[i],&id);
        vec[id].push_back(i);
        k=max(k,id);
    }
    for(int i=1;i<=k;i++)
    {
        for(int j=m;j>=0;j--)
        {
            bool flag=0;
            int siz=vec[i].size();
            for(int x=0;x<siz;x++)
                if(j>=w[vec[i][x]])
                    flag=1,dp[j]=max(dp[j],dp[j-w[vec[i][x]]]+v[vec[i][x]]);
            if(!flag)
                break;
        }
    }
    printf("%d\n",dp[m]);
    return 0;
}

你可能感兴趣的:(dp,动态规划,背包问题)