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 ...
随机推荐
- React 顶层 API
概览 组件 使用 React 组件可以将 UI 拆分为独立且复用的代码片段,每部分都可独立维护.你可以通过子类 React.Component 或 React.PureComponent 来定义 Re ...
- LeetCode 1249. Minimum Remove to Make Valid Parentheses
原题链接在这里:https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/ 题目: Given a string s ...
- LeetCode 916. Word Subsets
原题链接在这里:https://leetcode.com/problems/word-subsets/ 题目: We are given two arrays A and B of words. E ...
- UFUN 函数 UF_DISP (UF_DISP_create_image ) (如何把显示部件部分截图放到指定的文件夹中)
//此函数功能是输入工作部件的tag,返回工作部件的路径 static string path_name(tag_t path_tag) { ]=""; //得到工作部件的路径 U ...
- 苹果MAC OS查看MAC地址及修改ip
一,查看mac地址 第一步: 第二步: 第三步: 二,更改IP 第一步: 第二步: 第三步: 最后点击“好”就完成了 我要这天再遮不住我眼,要这地再埋不了我心.要这天下众生都明白我意,要那诸佛都烟消云 ...
- 洛谷 P2872 【[USACO07DEC]道路建设Building Roads】
P2872 传送门 首先 题目概括:题目让着求使所有牧场都联通.需要修建多长的路. 显然这是一道最小生成树板子题(推荐初学者做). 那我就说一下kruskal吧. Kruskal算法是一种用来查找最小 ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- python:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
# 将默认编码设为utf-8 # 否则会报错: # UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ...
- MVC WebApi Swagger帮助文档 接口用法
1.WebApi在解决方案Apps.WebApi中 2.将Apps.WebApi设置为启动项目之后,可以直接浏览到Api的帮助文档,并直接进行调试 3.登录接口 4.登录获取的token来访问其他接口 ...
- vue中使用时间插件、vue使用laydate
<input id="time1" readonly="readonly" placeholder="这里选择时间" v-model= ...