
动态规划
文章平均质量分 53
ygqwan
这个作者很懒,什么都没留下…
展开
-
背包九讲
背包问题九讲v1.1 PDF版 2007-7-15 PDF修订版本:2010年11月9日 目 录 第一章 前言 2 1.1 前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 目录 . . . . . . . . . . . . .转载 2012-10-26 18:02:15 · 2849 阅读 · 0 评论 -
hdu 2670 Girl Love Value(刚好装满的01背包)
题意:给你N个男孩,每个男孩都对kiki有一个love值Li和一个递减值Bi。Bi表示当没有选择他时他的LI值会每天递减Bi。现在需要挑选K个男孩使他们的love值的总和最大,每天只能挑选一个男孩 思路:当挑选出k个男孩时他们的总和是固定的,然后将他们Bi递减排序就能得到最大值。 现在我们需要从N个中挑出K个,先按照Bi值递减排序 dp[i][j] 表示从前j个男孩中挑出i个的最大总和 虽原创 2013-05-03 20:05:47 · 1362 阅读 · 0 评论 -
HDU 3449 Consumer(依赖背包)
自己的思路是:参考了背包九讲,用01背包初始化每一组背包,然后用分组背包写,不过悲剧的超时了;于是参考别人的代码写了写,不过理解不是很好 #include #include #include using namespace std; #define max(a,b) a > b ? a : b #define clr(arr,val) memset(arr,val,sizeof(arr))原创 2013-04-09 15:47:12 · 1209 阅读 · 0 评论 -
HDU 4501 小明系列故事——买年货(三维背包)
可以看成是3维背包问题,开的是四维数组,这个地方最好是用四维数组,因为有花费为0但是却又价值(估计现实是不会有的)的物品。 f[i][j][k][t] 是 在前 i 件物品中,最多花费 金钱 j,积分 k,消费券 k 的时候最大能够 获得的价值 #include #include #include using namespace std; #define CLR(arr,val) m原创 2013-04-08 15:05:56 · 1347 阅读 · 0 评论 -
hdu 1712 ACboy needs your help一维+二维(最多只取一次的分组背包)
就是告诉可以花的时间,和每一门课程需要的时间和价值,这,标准的分组背包问题,这就可以联系都01背包了,因为这里不再是把一个物品当做是01背包时的那种单一物品了,而是把一个组当做01的一个物品,这样就可以达到01的那种要么选要么不选的要求了,就是所一个组要么选,要么不选,如果要选的一个的话,就再遍历一下所有被选的情况,所以下面的三个for循环对比01背包解释如下: 第一个循环. 01物品的个数原创 2013-04-03 10:53:44 · 795 阅读 · 0 评论 -
hdu 1059 Dividing (多重背包 )
这一道题目和 hdu2844http://blog.youkuaiyun.com/ygqwan/article/details/8749731 是同一个类型,都可以用多重背包写,都有一个共同点就是标记为bool值比较好理解,但是这一个道也可以用分组背包写的,不过这是一个看做没有任何要求的背包(不是至少,最多一个之类的了),那么就可以看做是 01 背包了,再进一步转化成了多重背包,所以多重背包只是无特殊要求的分原创 2013-04-06 10:01:19 · 734 阅读 · 0 评论 -
hdu 1171 Big Event in HDU(多重背包)
这一道题是一道多重背包,和 hdu1059 是同一个类型的 #include #include #include using namespace std; #define CLR(arr,val) memset(arr,val,sizeof(arr)) const int MAX = 250100; bool dp[MAX]; int V; void zeroOnePack(原创 2013-04-06 11:34:54 · 1046 阅读 · 0 评论 -
hdu 3535 AreYouBusy(混合分组背包)
#include #include #include #include using namespace std; #define CLR(arr,val) memset(arr,val,sizeof(arr)); int _time,dp[101][101]; int main() { //freopen("in.txt","r",stdin); int group_num,m,typ原创 2013-04-05 17:38:58 · 912 阅读 · 0 评论 -
HDU1114题Piggy-Bank(最小值的完全背包)
这是完全背包的问题,只是这里需要求最小值,并且是需要装满,那么就需要dp[1]---d[v]=无穷大,dp[0]=0;别的都一样了 #include #include #include using namespace std; const int MAX =10005; int dp[MAX]; struct point { int c,w; }; int v; struct p原创 2013-04-01 23:35:21 · 856 阅读 · 0 评论 -
nyoj 289 苹果(01背包一维和二维实现)
一道01背包问题,今天把它和现在用一维数组写的代码比了比,发现用一维数组久了慢慢就忽视了背包的本质了,于是试着用三维数组写二维费用背包,wa了无数次,真的是优化了就忘了本质了,检讨一下.. #include using namespace std; struct package { int v; //价格 int w;原创 2013-04-02 20:08:45 · 1174 阅读 · 0 评论 -
HDU 2844 Coins(多重背包)
一个多重背包问题,有一点儿不同的是状态转移方程式了,这里的dp存的不再是价值和了,而是一个bool值,代表的是dp[i]中能不能凑齐到i 的钱,和01背包很像,说明如下: 假如现在要新添一个银币j,问是否能够凑齐到钱 i .那么,如果现在需要凑齐的钱i 减去 硬币 j 的面值 的钱 为 i-A[j].cost,如果i-A[j].cost的钱依然能够凑齐,那么i 也必定能凑齐(这个不用解原创 2013-04-02 09:51:07 · 824 阅读 · 0 评论 -
hud 3496 Watch The Movie(二维费用背包)
这一到题目的状态转移方程式不难找到,关键是如何初始化的问题,让我恼火的狠,纠结啊 二维数组代码如下: #include #include #include #include #include using namespace std; int n,m,l; int c[105],v[105]; int dp[105][1005]; void zeroOnePack(int cost原创 2013-04-02 21:49:02 · 744 阅读 · 0 评论 -
HDU 2159 FATE(二维费用完全背包)
#include #include #include using namespace std; const int MAX = 101; int dp[MAX][MAX]; int n,m,k,s; void zeroOnePack(int cost1,int cost2,int value) { for(int i=cost1;i<=s;i++) { for(int j=cost2原创 2013-04-03 09:42:24 · 633 阅读 · 0 评论 -
nyoj 104 最大和
题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=104 解题思路与难点:感觉变成了二维后不知道怎么dp(用上一次的值),于是联想到一维求最大和的问题;这道题的关键是怎么转换成一维。 再仔细一想,题目要求是矩形的一块区域最大值,那么我们就想到了穷举纵坐标所有的情况 看到了吗,假设我需要求红色矩形的值,那么我可以利用黑色矩形原创 2012-08-21 16:16:27 · 870 阅读 · 0 评论 -
hdu 2571 命运
这一道题真是做的哭,虽然状态转移方程式很好找到,但是初始化不好就能够让你头疼的要命,这个题可以积累点儿经验了 #include #include #include using namespace std; int row,col; const int rowMax=25,colMax=1005; int goal[rowMax][colMax]; int map[rowMax][colMa原创 2013-04-01 15:33:01 · 701 阅读 · 0 评论 -
Poj 1837 Balance(经典分组背包)
题目大意: 有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。 其中可以把天枰看做一个以x轴0点作为平衡点的横轴 看了会儿,发现不会,于是看了看http://blog.youkuaiyun.com/zhuyongqingacm/article/details/8882245,于是参考了看了一遍 dp[i][j] 意味:放上原创 2013-05-06 23:34:18 · 1265 阅读 · 0 评论