给定N中物品和一个背包。物品i的重量是Wi,其价值位Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大?对每种物品i只有两种选择,即装入背包和不装入背包
来源:互联网 发布:淘宝客佣金结算时间 编辑:程序博客网 时间:2024/05/16 17:55
/*背包问题*/
#include<stdio.h>
int f[101][101];//前i个物品装入容量为j的背包中获得的最大价值
int max(int a,int b)//调用函数选取a,b中最大的数
{
if(a>=b)
return a;
else
return b;
}
int bag(int n,int c[],int w[],int v)//n为物品种类,w为物品重量,v为物品价值,C为背包容量
{
int i,j;//i为第i件物品,j为背包此时容量
for(i=0;i<=n;i++)
f[i][0]=0;
for(j=0;j<=v;j++)
f[0][j]=0;//以上分别为背包容量为0和0个物品时物品价值为0;
for(i=0;i<=n;i++)
{
for(j=0;j<=v;j++)
{
if(j<c[i])//如果j此时的容量小于放入第i件物品
{
f[i][j]=f[i-1][j];//前i-1物品所产生的价值
}
else
{
f[i][j]=max(f[i-1][j],f[i-1][j-c[i]]+w[i]);//判断i放进去和不放进去那种取得的价值大然后输出价值大的
}
}
}
return f[n][v];
}
int main()
{
int s,c[101],w[101],n,i,v;
scanf("%d",&v);
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&c[i]);
for(i=0;i<n;i++)
scanf("%d",&w[i]);
s=bag(n,c,w,v);
printf("%d\n",s);
}
阅读全文
1 0
- 给定N中物品和一个背包。物品i的重量是Wi,其价值位Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大?对每种物品i只有两种选择,即装入背包和不装入背包
- (hdu step 3.3.1)Big Event in HDU(01背包:N件物品放在容量为V的背包中,第i件物品的费用是c[i],价值是w[i]。问所能获取的最大价值)
- 泛化物品的背包问题
- 物品无限的背包问题
- 0-1背包中每个物品重量和价值值都很小的情况
- 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使
- 背包系列第二篇----01背包(求解最大价值时背包的物品)
- 背包系列第五篇----完全背包(求解最大价值时背包的物品)
- 01背包基础详解(附求解选择的物品)
- 完全背包基础详解(附求解选择的物品)
- Bottles(选择k个物品的01背包)
- P08泛化物品的背包问题
- 输出01背包内物品的程序
- 有物品数量限制的背包问题
- 【Unity&NGUI】背包系统物品的累加
- Unity3d 简单的背包系统(物品交换)
- hiho1043(无限物品的背包问题)
- hdu 2546 01背包(从一堆物品中尽可能组成接近给定重量的方案)
- Balancing Act (树形dp+树的重心)
- tf.argmax(input, axis=None, name=None, dimension=None)
- Eclipse如何连接数据库---JDBC
- 广搜法做暴力的奥数题
- CodeForces
- 给定N中物品和一个背包。物品i的重量是Wi,其价值位Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大?对每种物品i只有两种选择,即装入背包和不装入背包
- 非模态对话框和模态对话框_创建
- Vue.js源码解析(九)【从template到DOM(Vue.js源码角度看内部运行机制)】
- LeetCode.682 Baseball Game
- Android 简易 自定义ImageView 实现圆形头像
- JDK开发webservice客户端和服务端 demo
- SpringMVC了解
- 支付宝支付的服务端接入流程
- 1.1 Hello, World!