转载请注明出处:http://blog.csdn.net/u012860063题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864Problem Description现有一笔经费能够报销一定额度的发票。同意报销的发票类型包含买图书(A类)、文具(B...
分类:
其他好文 时间:
2014-07-03 21:20:55
阅读次数:
209
学习要点: 1、分支限界法与回溯法 2、分支限界法的剪枝搜索策略 3、分支限界法的算法框架: (1)队列式(FIFO)分支限界法 (2)优先队列式分支限界法 4、应用范例: (1)单源最短路径问题 (2)装置问题 (3)布线问题 (4)0-1背包问题 ...
分类:
其他好文 时间:
2014-07-03 19:32:51
阅读次数:
173
多重背包,本题不需要二分优化。相对简单点。因为重复数十分小,小于10;
而增加一个限制每种材料的高度做法,如果使用逆向填表,那么只需要从这个高度往小递归填表就可以了。
还有就是注意要排序,以限制高度为标准从小到大排序,否则答案错误的。
#include
#include
#include
using std::sort;
const int MAX_K = 401;
const in...
分类:
其他好文 时间:
2014-07-01 16:08:42
阅读次数:
213
所谓的完全背包,就是说物品没有限制数量的。
怎么起个这么intimidating(吓人)的名字?
其实和一般01背包没多少区别,不过数量可以无穷大,那么就可以利用一个物品累加到总容量结尾就可以了。
本题要求装满的,故此增加个限制就可以了。...
分类:
其他好文 时间:
2014-07-01 14:25:28
阅读次数:
229
本题是背包问题,但是需要转化成背包的。
因为是两个人洗衣服,那么就是说一个人只需要洗一半就可以了,因为不能两个人同时洗一件衣服,所以就成了01背包问题了。
思路:
1 计算洗完同一颜色的衣服需要的总时间totTime
2 利用动态规划背包法求这些衣服能在那些时间点完成
3 求比(totTime+1)/2大的最小时间点
4 得到洗一种颜色衣服的时间,那么继续求下洗一种颜色衣服的时间
5...
分类:
其他好文 时间:
2014-07-01 14:22:46
阅读次数:
209
裸0/1背包,就是从各种币种里面拿来凑足N元,求最多有多种方案。用dp[i][j]表示选前i个币种凑成j的方案数量
状态转移方程: dp[i][j] = dp[i- 1][j] j = coins[i]
/*
ID:kevin_s1
PROG:money
LANG:C++
*/
#include
#include
#include
#include
#include
#i...
分类:
其他好文 时间:
2014-07-01 09:29:13
阅读次数:
209
这道题使用多重背包,不过其实我也不太明白为什么叫这个名字。
因为感觉不是什么多重,而是物体的分解问题。
就是比如一个物体有数量限制,比如是13,那么就需要把这个物体分解为1, 2, 4, 6
如果这个物体有数量为25,那么就分解为1, 2, 4, 8, 10
看出规律吗,就是分成2的倍数加上位数,比如6 = 13 - 1 - 2 - 4, 10 = 25 - 1 - 2 - 4 - 8,呵...
分类:
其他好文 时间:
2014-06-30 10:24:29
阅读次数:
188
本题解法很多,因为给出的数据特殊性故此可以使用DFS和BFS,也可以使用01背包DP思想来解。
这里使用BFS,缺点是比DFS更加耗内存,不过优点是速度比DFS快。
当然也比DFS难写点:
int N, B;
int Height[21];
inline int mMin(int a, int b) { return a > b? b : a; }
inline int mMax(int a...
分类:
其他好文 时间:
2014-06-28 08:11:26
阅读次数:
238
感觉用背包去想反而麻烦。。就是一个递推
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define ll __int64
using namespace std;
int n,v,k,s,dp[110][110],w[110]...
分类:
其他好文 时间:
2014-06-28 07:30:04
阅读次数:
208