
背包问题
文章平均质量分 53
四光年
算法无止境!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU1114 完全背包问题
玛德,数组开小了会超时。。。。 这篇文章就记录一下自己对于01背包到完全背包一维数组转换的理解。推荐去看《背包九讲》 as we all know,01背包的二维数组的转移方程就是:(这个真的是超级重要,后面的其他背包问题都可以看作是01背包问题延申出来的。嗯,我是个渣渣~我是看网上的大佬都这样说) for(int i=0;i<n;i++){ for(int j=0;j<=M...原创 2018-10-17 21:13:32 · 228 阅读 · 0 评论 -
HDu3466 贪心+01背包
我就觉得这个贪心的方法很魔性,不知道是谁想起来的。。。。 解法:按照p-q的大小排列顺序,我们会优先选择p-q较大的结点。按照p-q排列顺序,就变成了01背包的问题 但是dp和暴力刚好是两个逆过程,我们暴力是优先选择q-p大的,dp的时候就要反过来,先遍历q-p小的。 简单的证明:当我们遇到两个都可以选择的同时被选的结点,pi+qj<pj+qi前面一种代价小一些,我们优先选择前面的选择...原创 2018-10-31 17:56:21 · 244 阅读 · 0 评论 -
HDU2191 重复背包
#include <iostream> #include <cstring> #include <cstdio> #include <string> #include <algorithm> using namespace std; const int maxn=105; int dp[maxn]; int val[maxn]; in...原创 2018-10-30 16:20:41 · 154 阅读 · 0 评论 -
HDU2546
你只有非常努力,才能看起来毫不费力。 #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<stack> #include<queue> #include<set> #include<m原创 2018-10-30 20:54:09 · 248 阅读 · 0 评论 -
HDU2955 神奇的01背包
是将抢的钱数作为作为容量,将(1-pi)作为价值。 #include <bits/stdc++.h> using namespace std; #define ll long long #define INF 0x3f3f3f const int maxn=10000+10; double dp[maxn],P; int N; struct Node{ int m; doubl...原创 2018-11-02 00:01:23 · 163 阅读 · 0 评论 -
洛谷1282 背包
感觉还是对背包问题不太熟练。 思路:先把n个卡牌第一层加起来记为sum1,第二层卡牌加起来记为sum2。如果sum1<sum2,就将上下层翻转。使得sum1>sum2。V=sum1-sum2.所以我们就将问题转换成了,背包总体积为V,n个物品,每个物品的价值为1,体积为(a[i]-b[i])*2。求使得剩余体积尽量小的背包问题。 体积会出现负数,所以要加以处理。 #includ...原创 2019-02-27 14:39:28 · 266 阅读 · 0 评论 -
洛谷1417 排序后的01背包
https://www.luogu.org/problemnew/show/P141 总结: 序列最优为dp 选与不选,且有sum:极有可能是背包 选与不选,且有sum,且物品选择的顺序也影响结果:极有可能是按照某种顺序排列后再来个背包。(怎样获得这种顺序呢?我们选两个元素,让A先发生与B后发生 和 B先发生A后发生的情况进行比较,然后就可以获得某种排序方式,本题就是这样) 看到这个题第...原创 2019-04-16 16:34:11 · 229 阅读 · 0 评论