zoukankan      html  css  js  c++  java
  • P1757 通天之分组背包(分组背包)

    题目背景

    直达通天路·小 A 历险记第二篇

    题目描述

    自 0101 背包问世之后,小 A 对此深感兴趣。一天,小 A 去远游,却发现他的背包不同于 0101 背包,他的物品大致可分为 kk 组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少。

    输入格式

    两个数 m,nm,n,表示一共有 nn 件物品,总重量为 mm。

    接下来 nn 行,每行 33 个数 a_i,b_i,c_iai,bi,ci,表示物品的重量,利用价值,所属组数。

    输出格式

    一个数,最大的利用价值。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    int n,m;
    int dp[maxn][maxn];
    int c[maxn];
    int w[maxn];
    int b[maxn];
    vector<pair<int,int>> g[maxn];
    int main () {
        scanf("%d%d",&m,&n);
        for (int i=1;i<=n;i++) {
            scanf("%d%d%d",c+i,w+i,b+i);
            g[b[i]].push_back(make_pair(c[i],w[i])); 
        }
        for (int i=1;i<=1000;i++) {
            for (int j=0;j<g[i].size();j++) {
                for (int k=m;k>=g[i][j].first;k--)
                    dp[i][k]=max(dp[i][k],dp[i-1][k-g[i][j].first]+g[i][j].second);
            }
        }
        int ans=0;
        for (int i=1;i<=1000;i++)
            for (int j=0;j<=m;j++) ans=max(ans,dp[i][j]);
        printf("%d
    ",ans);
    }
  • 相关阅读:
    vitualBox上建虚拟机centos7
    spring整合Quartz
    Quartz(基础)
    log4j+coomons.logging打印日志
    ssm中使用pagehelper
    码云不必每次都输入用户名和密码的方法
    idea实用的操作
    Iterator
    Search for a Range 解答
    Search in Rotated Sorted Array (I, II) 解答
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13453662.html
Copyright © 2011-2022 走看看