代码改变世界

PKU--2184 Cow Exhibition (01背包)

2013-12-14 13:15 by gongti, 213 阅读, 0 推荐, 收藏,
摘要:题目http://poj.org/problem?id=2184分析:给定N头牛,每头牛都有各自的Si和Fi从这N头牛选出一定的数目,使得这些牛的Si和Fi之和TS和TF都有TS>=0 FS>=0并TS+FS达到最大值。这是一个背包问题。可以将Si和Fi一个当作是背包容量,另一个当作是价值。但是-1000#include#includeusingnamespacestd;constintINF=0... 阅读全文

PKU--1976 A Mini Locomotive (01背包)

2013-12-10 23:56 by gongti, 235 阅读, 0 推荐, 收藏,
摘要:题目http://poj.org/problem?id=1976分析:给n个数,求连续3段和的最大值。这个题目的思考方式很像背包问题。dp[i][j]表示前i个数字,放在j段的最大值。如果选了第i个数,则有 dp[i-1][j] 如果不选第i个数,由于题目是要连续的,则有dp[i-m][j-1]+sum[i]-sum[i-m] ,这里i-m是要保证连续。dp[i][j]=max{ dp[i-1][... 阅读全文

PKU--3211 Washing Clothes(01背包)

2013-12-10 14:16 by gongti, 169 阅读, 0 推荐, 收藏,
摘要:题目http://poj.org/problem?id=3211分析:两个人洗衣服,可以同时洗,但是只能同时洗一种颜色。要时间最短,那么每一种颜色的清洗时间最短。转换为,两个人洗同一种颜色的衣服,彼此之间的时间差最小。这里也就是前面做过的01背包问题了。#include#include#includeusing namespace std;int N,M;int num[20],sum[20],d... 阅读全文

HDU--3466 Proud Merchants (01背包)

2013-12-07 19:41 by gongti, 194 阅读, 0 推荐, 收藏,
摘要:题目http://acm.hdu.edu.cn/showproblem.php?pid=3466分析:这个题目增加了变量q 因此就不能简单是使用01背包了。网上看到一个证明:因为如果一个物品是5 9,一个物品是5 6,对第一个进行背包的时候只有dp[9],dp[10],…,dp[m],再对第二个进行背包的时候,如果是普通的,应该会借用前面的dp[8],dp[7]之类的但是现在这些值都是0,所以会导... 阅读全文

HDU--2955 Robberies( 01背包)

2013-12-06 19:13 by gongti, 260 阅读, 0 推荐, 收藏,
摘要:题目http://acm.hdu.edu.cn/showproblem.php?pid=2955分析:这个题目和此题有着类似的地方,就是不能直接将“效益”(NYOJ860指价值,HDU2955指风险)的值作为dp[]数组的大小。原因是前一个数据太大了,后一个则是浮点数。因此都要将背包问题中“价值”和“重量”互换。同时只有每一个银行都不被抓,才会不被抓。这里使用乘法原则。#include#inclu... 阅读全文

NYOJ--860 又见01背包(01背包)

2013-12-06 19:04 by gongti, 310 阅读, 0 推荐, 收藏,
摘要:题目http://acm.nyist.net/JudgeOnline/problem.php?pid=860分析:题目和普通的01背包问题一样,但是唯一不同的是数据的特殊性。如果10^9根本就开辟不了这么大的数组。于是这里我们就把重量和价值互换。#include#include#includeusing namespace std;const int INF=0X3F3F3F3F; //这里初始化一定要很大int main(){ int n,W,w[102],v[102],dp[10010],sum; while (scanf("%d%d",&n,&W)!= 阅读全文

HDU--2546 饭卡(01背包)

2013-12-06 12:29 by gongti, 220 阅读, 0 推荐, 收藏,
摘要:题目http://acm.hdu.edu.cn/showproblem.php?pid=2546分析:这是一个01背包的变种,加入了贪心的思想。这里我们思考(1)如果m=5 这个时候我们利用5元就可以购买到最有价值的菜,然后 使用m-5购买剩余的。那么m-5是背包的容量,剩余的菜是所选物品。#include#include#includeusing namespace std;int main(... 阅读全文

UVA--562 Dividing coins(01背包)

2013-12-06 00:32 by gongti, 158 阅读, 0 推荐, 收藏,
摘要:题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=503分析:两个人平分硬币,要求最后两者的差值最小。相当于一个人利用背包获得硬币,背包的容量相当于总价值的一半。#include#includeint main(){ int t,n,v[101],dp[5... 阅读全文

UVA--624 CD(01背包+路径输出)

2013-12-05 23:35 by gongti, 209 阅读, 0 推荐, 收藏,
摘要:题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=565分析:题目是一个01背包问题。但是增加了路径输出。由于路径,所以才有二维递推的形式。dp[i,j]=max{ dp[i-1,j], dp[i-1,j-m[i]]+m[i]}​在输出集合的时候,如果dp... 阅读全文

PKU--3628 Bookshelf 2(01背包)

2013-12-04 23:21 by gongti, 192 阅读, 0 推荐, 收藏,
摘要:题目http://poj.org/problem?id=3628分析:给定一堆牛的高度,把牛叠加起来的高度超过牛棚的高度。且是牛叠加的高度与牛棚高度之差最小。把牛叠加的高度看作是背包的容量,利用01背包计算所能达到的最大值。然后在最大值里面选择一个与牛棚高度差值最小的。在开辟dp[]数组的时候没有必要开辟20*1000000不然会超过内存,适当小一点即可。#include#includeconst... 阅读全文