背包总结
来源:互联网 发布:淘宝上的现代汉语词典 编辑:程序博客网 时间:2024/06/10 14:09
[0/1背包]
1 二维的状态转移方程
for(int i = 1 ; i <= n ; i++){
for(int j = sumV ; j >= 0 ; j--){
dp[i][j] = dp[i-1][j];
if(j >= v[i])
dp[i][j] = max(dp[i][j] , dp[i-1][j-v[i]]+w[i]);
}
}
2 一维的状态转移方程
for(int i = 1 ; i <= n ; i++)
for(int j = sumV ; j >= v[i] ; j--)
dp[j] = max(dp[j] , dp[j-v[i]]+w[i]);[完全背包]
1 状态转移方程
for(int i = 1 ; i <= n ; i++)
for(int j = v[i] ; j <= sumv ; j++)
dp[j] = max(dp[j] , dp[j-v[i]]+w[i]);[多重背包]
1 状态转移方程
for(int i = 1 ; i <= n ; i++)
MultiplePack(F ,C,W ,M )
if C · M ≥ V
CompletePack(F ,C,W )
return
k ←1
while k < M
ZeroOnePack(kC,kW )
M ←M − k
k ← 2k
ZeroOnePack(C · M ,W · M )
2 模板
for(int i = 1 ; i <= 4 ; i++)
multiplePack(v[i],w[i],num[i]);
void zeroOnePack(int cost , int weight){
for(int i = sumV ; i >= cost ; i--)
dp[i] = max(dp[i] , dp[i-cost]+weight);
}
void completePack(int cost , int weight){
for(int i = cost ; i <= sumV ; i++)
dp[i] = max(dp[i] , dp[i-cost]+weight);
}
void multiplePack(int cost,int weight,int amount){
if(cost*amount >= sumV){
completePack(cost , weight);
return;
}
int k = 1;
while(k < amount){
zeroOnePack(k*cost , k*weight);
amount -= k;
k *= 2;
}
zeroOnePack(amount*cost , amount*weight);
}
优化空间复杂度的方法,可以只使用二维的数组:当每件物品只可以取一次。时变量 v 和 u 采用逆序的循环,当物品有如完全背包问题时采用顺序的循环,当物品有如多重背包问题时拆分物品
- 背包总结
- 背包总结
- 背包总结
- 背包总结
- 背包总结
- 背包(01背包、完全背包、多重背包)问题总结
- 背包问题总结(01背包、完全背包、多重背包)
- 01背包问题总结
- 背包问题求解总结
- 01背包问题总结
- 完全背包问题总结
- P01234背包个人总结
- 背包问题总结一
- 背包问题总结二
- 0-1背包总结
- 背包问题总结
- 背包问题总结
- 背包问题总结
- android 一键接入新浪微博,腾讯微博,人人网,QQ空间,微信好友圈 (只需5分钟)
- Android 联系人PinnedHeaderListView
- ORACLE 收集统计信息
- Rabbitmq教程翻译(四)routing
- 【Emulator Snapshot】快照快速启动Android模拟器
- 背包总结
- 2013.6.17大数计算之浮点数
- 全面理解Unity加载和内存管理(很好)
- SAX解析XML文档
- Ubuntu安装及使用记录
- 2013年6月4日星期二(使用位图)
- SAP ABAP程序优化-多线程并行处理
- ios 疯狂基础之 打开模拟器沙盒路径
- const用法详解