POJ-动态规划-背包问题模板
背包问题模板
一、0-1背包
状态:背包容量为j时,求前i个物品所能达到最大价值,设为dp[i][j]。初始时,dp[0][j](0<=j<=V)为0,没有物品也就没有价值。
状态转移方程:由上述分析,第i个物品的体积为w,价值为v,则状态转移方程为
- j<w,dp[i][j] = dp[i-1][j] //背包装不下该物品,最大价值不变
- j>=w, dp[i][j] = max{ dp[i-1][j-list[i].w] + v, dp[i-1][j] } //和不放入该物品时同样达到该体积的最大价值比较
结构体:存放物品的体积和价值
struct Thing
{
int w;
int v;
}list[];
1.init():dp[][]数组初始化
int s, n;//背包容量和物品总数
void init()
{
for (int i = ; i <= s; i++) dp[][i] = ;//没有物品时最大价值均为0
}
2.package():执行背包,求解问题
void package()
{
for (int i = ; i <= n; i++)//循环每个物品,执行状态转移方程
{
for (int j = ; j <= s; j++)
{
if (j >= list[i].w) dp[i][j] = max(dp[i - ][j], dp[i - ][j - list[i].w] + list[i].v);
else dp[i][j] = dp[i - ][j];
}
}
}
优化后的一维01背包
1.init():dp[][]数组初始化
int s, n;//背包容量和物品总数
void init()
{
for (int i = ; i <= s; i++) dp[i] = ;//初始化二维数组//没有物品时最大价值均为0
}
2.package():执行背包,求解问题
void package()
{
for (int i = ; i <= n; i++)//循环每个物品,逆序遍历j执行状态转移方程
{
for (int j = s; j >= list[i].w; j--)
{
dp[j] = max(dp[j], dp[j - list[i].w] + list[i].v);
}
}
}
二、完全背包
1.init():dp[][]数组初始化
void init()
{
for (int i = ; i <= s; i++) dp[i] = ;//初始化二维数组//没有物品时最大价值均为0
}
2.package():执行背包,求解问题,正序遍历即可实现复用。
void package()
{
for (int i = ; i <= n; i++)//循环每个物品,正序遍历j执行状态转移方程
{
for (int j = list[i].w; j <= s; j++)
{
dp[j] = max(dp[j], dp[j - list[i].w] + list[i].v);
}
}
}
POJ-动态规划-背包问题模板的更多相关文章
- poj 动态规划题目列表及总结
此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...
- poj动态规划列表
[1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 13 ...
- POJ 动态规划题目列表
]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322 ...
- poj 动态规划的主题列表和总结
此文转载别人,希望自己可以做完这些题目. 1.POJ动态规划题目列表 easy:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, ...
- js动态规划---背包问题
//每种物品仅有一件,可以选择放或不放 //即f[i][w]表示前i件物品恰放入一个容量为w的背包可以获得的最大价值. //则其状态转移方程便是:f[i][w]=max{f[i-1][w],f[i-1 ...
- P1060 开心的金明(动态规划背包问题)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱 ...
- Poj 2187 凸包模板求解
Poj 2187 凸包模板求解 传送门 由于整个点数是50000,而求凸包后的点也不会很多,因此直接套凸包之后两重循环即可求解 #include <queue> #include < ...
- 背包问题模板,POJ(1014)
题目链接:http://poj.org/problem?id=1014 背包问题太经典了,之前的一篇博客已经讲了背包问题的原理. 这一个题目是多重背包,但是之前的枚举是超时的,这里采用二进制优化. 这 ...
- POJ 1276 Cash Machine -- 动态规划(背包问题)
题目地址:http://poj.org/problem?id=1276 Description A Bank plans to install a machine for cash withdrawa ...
随机推荐
- js 复选框回显
<div class="control-group"> <label class="control-label">客户状态:</l ...
- tomcat和apache的区别--http server vs application server
1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...
- 03_vlan & access & trunk 口(数通华为)
1. 网络拓扑: 2. SW1配置: 2.1 关闭设备调试信息:<Huawei>undo terminal monitor <Huawei>undo terminal debu ...
- 大文件断点续传插件webupload插件
java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接 ...
- Hibernate的级联保存、级联删除
级联操作: 属性:cascade 值:save-update(级联保存) delete(级联删除) all(级联保存+级联删除) 优点:虽然,不用级联操作也能解决问题.但是级联操作可以减少代码量,使得 ...
- [RN] React Native 分享弹窗 ShareAlertDialog
React Native 分享弹窗 ShareAlertDialog ShareAlertDialog.js文件 /** * 分享弹窗 */ import React, {Component} fro ...
- linux命令之------which命令/cp命令/Head及tail命令/grep命令/pwd命令/cd命令/df命令/mkdir命令/mount及umount命令/ls命令/history命令/ifconfig命令/ping命令/useradd命令/命令passwd/kill命令/su命令/clear命令/ssh命令/tar解压缩/远程拷贝scp
which命令 1) 作用:搜索某个系统命令的位置. 2) 案例:查询vi命令路径:which vi cp命令 1)作用:用于复制文件或目录: 2)-a:此选项通常使用在复制目录时使用,它 ...
- Javascript总结(全)
说明 个人感觉总结得很好忍不住要分享,转载自github地址,作者博客原文发现打不开,于是复制粘贴到此处,如有侵权,请联系本人删除. Type class TypeFn { isString (o) ...
- transient的
1,transient的用途及使用方法1,用途 我们知道,当一个对象实现了Serilizable接口,这个对象就可以被序列化,我们不关心其内在的原理,只需要了解这个类实现了Serilizable接口, ...
- js获取数组中的最大值/最小值
目录 前言 1. 使用Math的静态方法max/min 1.1 结合ES6的扩展运算符...使用 1.2 结合apply/call方法来使用 1.3 结合reduce来使用 2. 排序获取 2.1 只 ...