
背包
南山小翁
活在当下,要有思想,每个人不是随随便便就能成功!
展开
-
poj 3628
上午用背包做 没想出 然后直接暴搜 AC 下午 突然想出一个方法 果断AC #include#include#define Max 20000010int dp[Max];int N,B;int weight[30];int max(int a,int b){ return a>b?a:b;}int main(){ int tem;原创 2013-03-29 17:26:07 · 541 阅读 · 0 评论 -
数位DP 《 菜鸟与大牛在于一念之间》
hdu3555 #include#include#include#includeusing namespace std;__int64 dp[30][4];void init(){ memset(dp,0,sizeof(dp)); dp[0][0]=1; for(int i=1; i<=20; i++) { dp[i][0]=dp原创 2013-04-08 22:20:37 · 3920 阅读 · 1 评论 -
hdu3127
题意:给你一块X*Y的布,然后选做n个手帕,给你这n个手帕的长和块,做出每个手帕会获得相应的利润,问该怎样分配这块布,才能获得最大的利润。http://www.cnblogs.com/feature/articles/1856555.html 图画的不错,很容易理解。#include#include#include#includeusing namespace std;int dp原创 2013-04-07 17:20:33 · 919 阅读 · 0 评论 -
整数划分:
一个数可以被分解成几个数和的形式: 利用动态规划求解:根据不同要求做相应的改变,注意高精度的处理 for(int i=0;i for(int j=i;j dp[j]+=dp[j-i];hdu1028: 求解一个数可以被分解多个数和的形式,这种情况有几种?#include#include#include#includeusing namespace st原创 2013-04-06 14:14:33 · 537 阅读 · 0 评论 -
http://poj.org/problem?id=2063
//题意:John购买债券,购买不同价位的债券,你所获得的收益不同,(数据特点:你所存的钱是1000的倍数)//或得的最大的收益为多少?//完全背包,背包的容量是发生变化的。#include#include#includeusing namespace std;int dp[100000];int val[100];int weight[100];int max(int a,i原创 2013-04-03 20:51:43 · 670 阅读 · 0 评论 -
http://poj.org/problem?id=1384
一个存钱罐,有自己的重量E和它所能承受的重量F,现在有N种不同的硬币,每个硬币有不同的价值V和重量W,问这个存钱罐最小能放多少钱完全背包,正常情况下,我们查找最大值,现在我们查找最小值即可:#include#include#define max 11000using namespace std;int val[555],wei[555];int dp[max];int T,t;i原创 2013-04-04 10:45:37 · 789 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2159
/*二维背包: 忍耐度 与 怪的数量dp[i][j]=max(dp[i][j],dp[i-v][j-k]+val[v]);i代表忍耐度,j代表杀怪的数目,dp[i][j]代表获得的经验值。*/#include#include#include#includeusing namespace std;int dp[111][111];int val[111],wei[111];原创 2013-04-04 16:12:47 · 560 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2546
//思路:将饭卡里的钱数作为包的容量,在刷卡的时候会出现两种情况:①当全部刷完之后,卡里的剩余量>=5,直接刷。//②当全部刷完之后,卡里的剩余量=5,用来买最贵的菜。小贪心#include#include#includeusing namespace std;int rank[11000];int dp[11000];int ans[11000];int max1(int a,原创 2013-03-30 11:19:44 · 557 阅读 · 0 评论 -
http://poj.org/problem?id=1014 多重背包转化成01背包
//题意:给你6种不同面值的弹球,让你把它们分成两份,有一个条件是”它们不能被切开,均分的前提是,保证每个弹球的完整性“;//思路:数据量很大,用二进制拆分来提高效率,将一个整数M拆分成1,2,4,8,2^n,M-2^n+1,这种形式,在后在合并,转化成01背包求解,#include#include#includeusing namespace std;int num[420010];原创 2013-03-30 19:12:38 · 664 阅读 · 0 评论 -
hdu2955 解决问题的思路不错 逆向求解
//题意:Roy想偷银行里的钱,但是在偷每个银行里的钱时,都冒着一定被抓的风险,为了能让被抓的风险降低为(小于等于p)//求所偷的最大的值。//思路:刚开始以为将被抓的概率X100000,然后把p当做背包的容量,利用01背包求解,但是最后还是错了,因此小数点后面的位数太多了。//看了下别人的思路,感觉挺好。转化为最大的存活概率。//即:将银行所有的资产转化为背包的容量,求存活率最高,注意当原创 2013-03-29 20:25:46 · 667 阅读 · 0 评论 -
http://poj.org/problem?id=3628 背包问题还有一个地方没想明白 直接DFS()
题意:Farmer John最近为cow library买了个书架,由于该书架很快被放满了,所以空余的部分都在上部。现在为了能够到达顶部,需要把一些cow叠放在一起,然后当堆叠在一起的时候可以达到最大高度时,找出满足条件时差值最小滴。#include#include#includeusing namespace std;int num[40];int ans;int n,b;原创 2013-03-29 11:51:38 · 786 阅读 · 0 评论 -
http://poj.org/problem?id=3624
//题意:Bessie他想在charm bracelet上添加charms,每个charms有一个重量和一个法力值,并且每一种charm有且仅有一个。//由于Bessie所能承受的重量有限,所以不能无限的添加charms,在规定的重量范围内,如何将获取最大的法力值。//思路:这是一道01背包的题目,包的容量为M(即:最大所能承受的重量)。//状态转移方程为:dp[j]=max(dp[j],d原创 2013-03-29 10:58:32 · 630 阅读 · 0 评论 -
http://poj.org/problem?id=3211
//01背包问题: 有一对朋友洗衣服,一次只能洗完颜色相同的衣服之后,再洗其它颜色的衣服。//求解洗完全部的衣服之后花费的最小时间//思路:洗每种颜色相同的衣服所花费的时间不一样,如果一个人洗完了,则另一个人处于等待状态。所以我们应该让他们的时间尽可能的相同//所以我们应该找出所有相同衣服所花费的总时间sumTime,然后在sumTime/2这个时间段中尽可能的多洗衣服。状态转移方程原创 2013-03-29 10:30:40 · 616 阅读 · 0 评论 -
http://acm.hdu.edu.cn/showproblem.php?pid=2602
题意:一介屌丝喜欢收集各种骷髅头,每个骷髅头都一个体积和价值,这个屌丝有一个袋子体积为V,唉,穷屌丝比较贪,他想收集各种骷髅头放到他的袋子中,要求获得的利润最大。并让你#includeint weight[1010];int value[1010];int dp[1010];int max(int a,int b){ return a>b?a:b;}int main(){原创 2013-03-29 18:20:19 · 874 阅读 · 0 评论 -
http://poj.org/problem?id=1252
题意:由给定的6个数组成【1,100】中的每个数,(第一个数字是1)找出每个数的最少组合,让你求平均组合数和最大组合数可以有负值:完全背包//C++#include#include#include#define max 10010using namespace std;int dp[max];int num[13];int T;int min(int a,int b){原创 2013-04-11 16:03:59 · 729 阅读 · 0 评论