分组背包

原创 2013年12月04日 22:06:58

Problem Description

一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

Input

输入有多组数据,每组数据的第一行:三个整数,V(背包容量,V<=200),N(物品数量,N<=30)和T(最大组号,T<=10); 第2..N+1行:每行三个整数Wi,Ci,P,表示每个物品的重量,价值,所属组号。

Output

对于每组数据输出仅一行,一个数,表示最大总价值。

Sample Input

10 6 3
2 1 1
3 3 1
4 8 2
6 9 2
2 8 3
3 9 3

Sample Output

20
/*
     解题报告:以组的编号和背包的体积为阶段,在每组的不同体积背包能够得到最大的价值;
               在从第1组到最大组进行DP;
               转移方程:dp[i][j+k]=max(dp[i][j+k],a[i][j]+dp[i-1][k]);
               其中a数组存储的是每组不同体积背包能够获得的最大价值,i表示每组的编号,
                       j表示背包的体积。
*/
//标程:
#include<stdio.h>
#include<string.h>
int dp[50][210],a[50][210];
int main()
{
    //freopen("a.txt","r",stdin);
    int n,v,t,i,j,k,w,val,t0;
    while(scanf("%d%d%d",&v,&n,&t)!=EOF)
    {
        memset(dp,0,sizeof(dp));
        memset(a,0,sizeof(a));
        for(i=0;i<n;i++)
        {
            scanf("%d%d%d",&w,&val,&t0);
            for(j=w;j<=v;j++)
                if(a[t0][j]<val) a[t0][j]=val;
        }
        for(i=1;i<=t;i++)
            for(j=0;j<=v;j++)
                for(k=0;j+k<=v;k++)
                   if(dp[i][j+k]<a[i][j]+dp[i-1][k]) 
                       dp[i][j+k]=a[i][j]+dp[i-1][k];
        printf("%d\n",dp[t][v]);
    }    
    return 0;
}

基本分组背包

有n件物品和一个容量为v的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为几组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总...
  • y91041
  • y91041
  • 2013年11月06日 11:15
  • 477

浅谈分组背包

分组背包,由基础背包演化而来的一种情况。 具体问题是这样的。具体问题是这样的。一个容量为V的背包,还有若干组物品,每组包含若干物品,这些物品各不相同,而且体积w和价值p各不相同。组内的物品相...
  • kyriesnow
  • kyriesnow
  • 2015年03月14日 09:21
  • 342

分组背包及树上分组背包

【人生相关】好困啊QAQ 小伙伴们明天都去APIO了 当初脑残没报名= = 蛮后悔的= = 但想想2800rmb 也就还好了 美好的一天从一道树形dp开始 昨天看了下以前写的分组背包 树形dp ...
  • yxr0105
  • yxr0105
  • 2016年05月04日 09:52
  • 434

动态规划:HDU1712-ACboy needs your help(分组背包问题)

ACboy needs your help Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Oth...
  • yopilipala
  • yopilipala
  • 2017年07月11日 11:04
  • 427

HDU OJ 3303 I love sneakers!【动态规划之分组背包入门】

原题连接:http://acm.hdu.edu.cn/showproblem.php?pid=3033 题意:看样例: 5 10000 3 1 4 6 2 5 7 3 4 99 1 55 ...
  • PIAOYI0208
  • PIAOYI0208
  • 2012年07月10日 13:22
  • 1728

分组的背包问题(背包九讲)

问题:         有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用...
  • u013147615
  • u013147615
  • 2014年05月23日 16:39
  • 1974

HDU 4341-分组背包/01背包

http://acm.hdu.edu.cn/showproblem.php?pid=4341 黄金矿工的游戏,给n个点,每个点有花费,价值,让最少的时间内选出最大价值的物品集合。 有个问题...
  • viphong
  • viphong
  • 2016年04月24日 18:14
  • 140

分组背包思路

问题: 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用...
  • weixin_38293125
  • weixin_38293125
  • 2017年10月21日 20:00
  • 79

hdu 1059 Dividing(二进制转化优化) 分组背包

多重背包问题 题目 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2012年07月21日 19:55
  • 1082

HDU4281 Judges' response(状态压缩+01背包+分组背包)经典

Judges' response Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others...
  • u010372095
  • u010372095
  • 2014年12月05日 22:44
  • 787
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分组背包
举报原因:
原因补充:

(最多只允许输入30个字)