0-1背包问题----最基础题
来源:互联网 发布:软件测试原理 编辑:程序博客网 时间:2024/05/17 04:44
描述
有N件物品和一个容量为V的背包。第i件物品的容量是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。
输入
输入包括干个测试用例,第一行为一个正整数K(1<=k<=10)表示用例个数,每个用例占三行,第一行为N和V,表示表示物品数量及背包容量,第二行为各物品的容量,第三行为各物品的价值。
输出
每个用例,用一行输出可装入的总大价值。
样例输入
2
5 10
1 1 1 1 1
5 8 6 4 5
4 20
8 7 6 4
14 15 20 9
5 10
1 1 1 1 1
5 8 6 4 5
4 20
8 7 6 4
14 15 20 9
样例输出
28
44
0-1背包就是用这个状态方程:f[i][j]=max{f[i-1][j],f[i-1][j],f[i-1][j-c[i]]+w[i]};
代码体现:
#include <stdio.h>const int maxn=1000;int c[maxn],val[maxn],w[maxn][maxn];int main(){int t,n,m,i,j;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%d",&c[i]);// 每个物体容量for(i=0;i<n;i++)scanf("%d",&val[i]);//每个物体的价值for(i=1;i<=n;i++)w[i][0]=0;for(i=1;i<=m;i++)w[0][i]=0;for(i=1;i<=n;i++){for(j=1;j<=m;j++)//总的容量{if(j<c[i-1])w[i][j]=w[i-1][j];else if(w[i-1][j]<w[i-1][j-c[i-1]]+val[i-1])w[i][j]=w[i-1][j-c[i-1]]+val[i-1];elsew[i][j]=w[i-1][j];}}printf("%d\n",w[n][m]);}return 0;}
0 0
- 0-1背包问题----最基础题
- 0-1背包基础问题
- 0-1背包(最简单也是最难的背包问题)
- 动态规划 0/1 背包问题, 最短路径问题
- 动态规划之背包问题,最基础的动态规划
- 背包问题(0-1背包、完全背包、多重背包)详解
- HDU 2602(Bone Collector)基础0-1背包问题
- HDU 1864(最大报销额)基础0-1背包问题
- 背包问题和0-1背包问题
- 背包问题和0-1背包问题
- 背包问题系列--"0-1背包问题"
- 背包笔记-含0/1背包问题、完全背包问题、多重背包问题、二维背包问题、分组背包问题
- 背包基础问题讲解
- 背包基础问题讲解
- 背包基础问题讲解
- 背包基础问题讲解
- 背包基础问题讲解
- 背包基础问题讲解
- Atomic包实现原理
- java web项目里ehcache.xml介绍
- 黑马程序员--iOS--Objective-C基础 (Foundation框架 一 )
- easyui combogrid 的查询
- ios webview 获取 网页的URL、title和HTML
- 0-1背包问题----最基础题
- Finding Nemo(POJ--2049
- Android双击返回键退出的方法
- runloop
- ViewPager不能高度自适应?height=wrap_content 无效解决办法
- C#调用MATLAB的COM组件中如果调用非自带的工具箱函数
- QLatin1String类的学习
- 当客户端socket关闭时,select模型的server端该如何完美的释放掉连接的socket? [问题点数:100分,结帖人guopo]
- Javascript单元测试的基础