博客
关于我
分组背包问题
阅读量:369 次
发布时间:2019-03-05

本文共 860 字,大约阅读时间需要 2 分钟。

分组背包

有 N 组物品和一个容量是 V 的背包。
每组物品有若干个,同一组内的物品最多只能选一个。
每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。
求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。
输出最大价值。

输入格式
第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。
接下来有 N 组数据:
每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;
每组数据接下来有 Si 行,每行有两个整数 vij,wij,用空格隔开,分别表示第 i 个物品组的第 j 个物品的体积和价值;
输出格式
输出一个整数,表示最大价值。

数据范围
0<N,V≤100
0<Si≤100
0<vij,wij≤100
输入样例
3 5
2
1 2
2 4
1
3 4
1
4 5
输出样例:
8

#include<iostream>#include<algorithm>using namespace std;const int N=110;int n,m;int v[N][N],w[N][N],s[N];int f[N];int main(){       cin >> n>> m;    for(int i=1;i<=n;i++)    {           cin>> s[i];        for(int j=1;j<=s[i];j++)   cin >> v[i][j] >> w[i][j];    }        for(int i=1;i<=n;i++)        for(int j=m;j>=0;j--)            for(int k=1;k<=s[i];k++)                if(j>=v[i][k])                    f[j]=max(f[j],f[j-v[i][k]]+w[i][k]);    cout << f[m]<< endl;    return 0;}

转载地址:http://ehfwz.baihongyu.com/

你可能感兴趣的文章
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
查看>>
SLAM学习笔记-求解视觉SLAM问题
查看>>
target加载不出文件的原因之一
查看>>
普歌-允异团队-HashMap面试题
查看>>
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
查看>>
C 语言顺序表查找和折半查找
查看>>
Windows下Python安装与使用
查看>>
Font Awesome图标库使用
查看>>
程序员应该知道的97件事
查看>>
我编程,我快乐—程序员职业规划之道
查看>>
谷歌浏览器如何设置不阻止弹窗弹出
查看>>
剑指 Offer 29. 顺时针打印矩阵
查看>>
Web基础应用 NFS服务基础 触发挂载
查看>>
create-react-app路由的实现原理
查看>>
PSI值
查看>>
海思Hi3531DV100开发环境搭建
查看>>
Xilinx Zynq pl353-nand使用
查看>>
JavaScript上传下载文件
查看>>
QWaitCondition把异步调用封装成同步调用
查看>>
windows驱动开发-编译错误集合
查看>>