朴素的完全背包
2016-07-25 21:53
246 查看
完全背包问题 有n种重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求挑选出的物品总价值的最大值。每件物品物品可以挑选任意多件。 1《=n《=100 1《=wi,vi<=100 1<=W《=10000 样例: n=3 w: 3,4,2 v:4,5,3 W=7
dp[i][j]:从前i种物品中挑选总重量不超过j的总价值的最大值
dp[0][j]=0;
dp[i+1][j]={
max(dp[i][j-k*w[i]]+k*v[i],dp[i+1][j])
}
由此,我们可以得到一个递推程序:
int dp[MAX_N+1][MAX_M+1];//dp数组 void solve(){ for(int i=0;i<n;i++) { for(int j=0;j<W;j++){ for(int k=0;k*w[i]<=j;k++){ dp[i+1][j]=max(dp[i][j],dp[i+1][j-k*w[i]]+v[i]*k); } } } }
其实,dp[i][j]=dp[i-1][j-w[i]]+v[i],这样可以压缩掉一维。
压缩之后:
for(int i=0;i<n;i++){ for(int j=0;j<=W;j++){ if(j>w[i]){ dp[i+1][j]=max(dp[i+1][j],dp[i][j-w[i]+v[i]]); } } }
相关文章推荐
- 正则表达式介绍及常见用法
- Hibernate 入门示例
- 4632 NOIP[2015] 运输计划
- Hibernate学习笔记----Session管理和批量操作
- java设计模式_原型模式
- 使用SpringMVC实现文件上传功能
- Exception in thread "main" java.lang.AbstractMethodError: weblogic.server.channels.ServerChannelImpl
- [状态机]嵌入式设计模式:有限状态自动机的C语言实现
- 如何使用SAP发送邮件?
- JDNI学习总结(一)
- 大数据基础(六) Matlab R2015b MDCE分布式计算环境搭建
- IntelliJ IDEA应用第一步
- 数据结构 -- 红黑树
- MongoDB 3.2配置文件directoryPerDB参数,无法重启
- UVA 11212 Editing a Book 【IDA*】
- 内部类----静态内部类
- 实现高可用和高可伸缩性系统
- 设计模式之简单工厂、工厂方法和抽象工厂
- 局部变量与成员变量的区别 及堆java中堆与栈的分析
- Android源码编译make的各类错误解决方案汇总