博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
01背包
阅读量:7093 次
发布时间:2019-06-28

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

有n个物品,每个物品的重量为weight[i],每个物品的价值为value[i]。现在有一个背包,它所能容纳的重量为total,问:当你面对这么多有价值的物品时,你的背包所能带走的最大价值是多少?

题解:关键在于状态方程。

代码:

1 #include
2 #define MAX 1000 3 int max(int a,int b) 4 { 5 return a>b?a:b; 6 } 7 int main() 8 { 9 int n,m,w[MAX],v[MAX],i,j,dp[MAX]; 10 printf("背包容量:");11 scanf("%d",&m);12 printf("物品个数:");13 scanf("%d",&n);14 printf("每个物品的重量和价值:\n");15 for(i=1;i<=n;i++)16 scanf("%d%d",&w[i],&v[i]);17 for(i=1;i<=n;i++)18 for(j=m;j>=w[i];j--)19 dp[j]=max(dp[j],v[i]+dp[j-w[i]]); //dp[j]表示重量为j的背包中所装物品的最大价值(dp数组元素的值表示价值,下标j表示重量)20 printf("最大价值为:%d\n",dp[m]);21 return 0;22 }

 

转载于:https://www.cnblogs.com/jasonlixuetao/p/4419213.html

你可能感兴趣的文章
编码风格——linux内核开发的coding style
查看>>
表格隔行变色案例
查看>>
IOS 模拟不同网络环境 - Network Link Conditioner
查看>>
JAVA第一周学习
查看>>
sql语句select group by order by where一般先后顺序 转载
查看>>
for循环是怎么工作的
查看>>
支付宝支付
查看>>
第三周 动态规划算法(1):1.集合加法
查看>>
iPhone 上怎么给CSS定义 active 样式
查看>>
讨论CGContextDrawImage
查看>>
Servlet基础
查看>>
tomcat+mysql安装配置,项目部署(上)
查看>>
linux sysrq
查看>>
Incorrect NSStringEncoding value 0x0000 detected.
查看>>
(转)as3数组的深复制和浅复制
查看>>
Choose a destination with a supported architecture in order to run on this device.
查看>>
HTML5/CSS3系列教程:HTML5 区域(Sectioning)的重要性
查看>>
Spring Batch学习笔记
查看>>
asp.net mvc 如何在执行完某任务后返回原来页面
查看>>
Oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子
查看>>