
背包
morejarphone
这个作者很懒,什么都没留下…
展开
-
HDU5119(DP)
求n个数,取出其中若干个使其异或和大于等于m的方案数。有个简单的优化就是把当前异或到得所有的结果存起来。#include #include #include #include #include using namespace std;const long long maxn = 1024*1024;int dp[maxn][42];int num[maxn], cnt;b原创 2015-10-07 19:24:33 · 608 阅读 · 0 评论 -
HDU 2844 (多重背包)
题意是给你n个价值和对应的数量,问1到m之内有多少价值可以构造出来。很裸的多重背包。#include using namespace std;#define maxn 111111bool dp[maxn];int a[maxn];int p[maxn], tot, n, m;int main () { //freopen ("in", "r", stdin);原创 2015-11-17 17:41:20 · 301 阅读 · 0 评论 -
HDU 2191 (多重背包)
水题,还可以用滚动数组~#include using namespace std;#define maxn 1111#define INF 11111111int dp[111]; //花i钱的最大收益int tot, n, m, sum;struct node { int w, cost;}p[maxn];int main () { //freopen原创 2015-11-17 19:04:48 · 317 阅读 · 0 评论 -
HDU 5534 (多重背包)
题意是让你构造一棵树使得这棵树的价值最大。树的价值等于节点价值的和,节点的价值等于度数i的函数f(i)。首先n个点的树只需要总度数为2×n-2并且每个点的度数都为正那么这棵树肯定存在。很容易想到的是用一个二维的DP去搞,DP[i][j]表示已经搞了i个点总共用j度的最大价值。但是这样要枚举三重循环复杂度太高了。可以把每个点预先都放上1度,然后就变成n-2度的总度数最大价值是多少。注意放原创 2015-11-17 23:27:22 · 496 阅读 · 0 评论 -
HDU 1011 (树背包)
坑点是特判。#include using namespace std;#define maxn 111#define maxm 222struct node { int from, to, next;}edge[maxm];int bug[maxn], brain[maxn];int n, m, head[maxn];int ans;int dp[maxn][max原创 2015-11-18 16:19:06 · 327 阅读 · 0 评论 -
HDU 5445 (多重背包)
题目链接:点击这里题意: 有n个物品, m个卡车. 已知每种物品的能量, 体积和数量还有每种卡车的体积, 花费和数量, 求至少得到p能量的最少的卡车花费. 物品装卡车的时候能够切开装.两次多重背包, 第一次求出至少的到p能量的最少体积, 第二次求出每一种花费下最多能够装多少体积, 然后遍历一遍就好了.#include <bits/stdc++.h>using namespace std;#def原创 2016-06-30 17:50:54 · 401 阅读 · 0 评论 -
codeforces 730J (01背包)
题目链接:点击这里题意:给出n个杯子的容量和杯内水的体积,问最少多少个杯子能够装下所有的水,以及在这个杯子数量下最少需要倒多少体积。需要的最少杯子数很好求,按照体积排个序扫一遍就能知道。然后选择某些杯子,倒水总体积就是水的总体积减去这些选中杯内的水。所以我们要在选中杯子的总容积大于等于水的总体积的前提下最大化选中的杯子中的水的总体积。考虑用dp[i][j]表示选择了i个杯子,一共j体积的水能够获得的原创 2016-10-25 20:28:37 · 1246 阅读 · 0 评论