ACM_背包
文章平均质量分 83
SmallKind
这个作者很懒,什么都没留下…
展开
-
poj 2184 Cow Exhibition
题意:变形的01背包,其实问题的本质是保证智商和幽默感和不为负数情况下的最大和。智商属性体积,幽默感属性为价值,问题转换为 求体积大等于0时的体积、价值总和。链接:点击打开链接#include#include#includeusing namespace std;#define M 10000#define INF 1000000#define原创 2013-05-16 19:35:02 · 300 阅读 · 0 评论 -
NUBT 1480 懒惰的风纪委Elaine
链接:点击打开链接题意:找出Elaine能用卷轴到达的街道数量。思路:多重背包问题,我们可以用二进制拆分来做,x=1+2+4+8+一个奇数。。如果DP【j-y*a[i]】!=-1,那么DP【j】肯定可以到达。不要往级最后一个奇数也要加入背包。。。。#include#include#includeusing namespace std;int n,m;int dp[1100],原创 2013-07-20 16:08:24 · 977 阅读 · 0 评论 -
hdu 1059 Dividing
链接:点击打开链接给你价值为1,2,3,4,5,6的神马东东n1,n2,n3,n4,n5,n6块,两个人分,看可不可以平分。。。很明显的多重背包题目,但不好意思超时啦。然后可以转换成二进制的01背包来做。我的是:首先dp[i]全部赋值为0,dp[0]=1;如果dp[k]==0,说明价值为k就不能分到,dp[k]==1,然后看dp[k+i+1]==0,等于0,就更新后面可行的数,不等于0原创 2013-06-04 16:38:41 · 366 阅读 · 0 评论 -
poj 1787 Charlie's Change
链接:点击打开链接给你一个价值p,给你T1个1,T2个5,T3个10,T4个25的硬币,用这些硬币来刚好支付这个P用的最多硬币数是多少。#include#include#include#includeusing namespace std;int main(){ int i,j,k,p,t[4],dp[10100],used[10100],path[10100],num[30]原创 2013-06-04 16:25:11 · 363 阅读 · 0 评论 -
Poj 2063 Investment
投资k年获得最大投资,每年都选最大利息的方案进行投资k年后就可以得到最多的人民币.#include#include#include#includeusing namespace std;int dp[50000];int main(){ int i,j,t,n,y,m,a[14],b[14],k; scanf("%d",&t); while(t--){ scanf("%d原创 2013-06-02 14:34:41 · 460 阅读 · 0 评论 -
poj 3181 Dollar Dayz
链接:点击打开链接这道题如果不是数据超过__int64位的范围就是一道简单的完全背包问题,高精度模拟大数加法,其他的就是完全背包差不多啦。。。#include#include#includeusing namespace std;int dp[1010][110];void ADD(int n,int m){ int i,j; for(i=0;i<60;i++){ d原创 2013-05-27 20:38:43 · 307 阅读 · 0 评论 -
uva 147 - Dollars
链接:点击打开链接和uva 674 差不多一样,就是这个涉及精度,那个dp[i]数组得用long long型,这个的注意,注意精度基本就是一个简单的完全背包问题,我那个钱币种类露掉一个,害的我WA几次。。。#include#include#include#includeusing namespace std;long long dp[30010];int main(){ in原创 2013-05-25 16:53:37 · 351 阅读 · 0 评论 -
uva 562 Dividing coins
链接:点击打开链接平衡问题,将n个硬币的总价值累加得到sum,再用sum/2作为背包容量对n个硬币做01背包处理,使两个人的钱数最小,把差额输出来#include#include#include#include#include using namespace std;int dp[100010];int main(){ int i,j,t,n,sum,a[110],an原创 2013-05-23 22:58:28 · 397 阅读 · 0 评论 -
uva 624 CD
链接:点击打开链接常规的01背包,但要输出路径,b[i][j]来标记哪些值取了,明白b[i][j]就很简单啦#include#include#include#includeusing namespace std;int dp[100010],a[30],n,m,b[30][100010],c[30];int main(){ int i,j,s; while(~sca原创 2013-05-23 21:16:50 · 433 阅读 · 0 评论 -
uva 674 Coin Change
链接:点击打开链接题意:有5中硬币,50,25,10,5,1.给数n,每种硬币都可以取无数次,用这些硬币组成n有方法有多少种。完全背包,dp[j][i],前i种硬币组成价值j的方法数是多少。 1:如果硬币只由1分组成,那么总方案数就是1 2:如果硬币由1和5组成,那么总方案数就是1+s1 (s1为1和5组成的方案)原创 2013-05-22 20:41:32 · 362 阅读 · 0 评论 -
hdu 2126 Buy the souvenirs
链接:点击打开链接题意:n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数。加一维表示已经买几件物品。#include#include#includeusing namespace std;int main(){ int i,j,t,n,m,sum,ans; int dp[510][2],a[40]; scanf("%d",&t); wh原创 2013-05-19 20:15:59 · 357 阅读 · 0 评论 -
hdu 3466 Proud Merchants
链接:点击打开链接题意:你有m元,一些物品,每个物品有一个价格p,价值为v,但你身上的钱少于q时,你不能购买这个物品,求你所能得到的最大价值。思路:01-背包,先按q-p排序,然后就是跟简单的01-背包处理差不多啦。#include#include#include#includeusing namespace std;struct node{ int p; i原创 2013-05-18 19:12:18 · 397 阅读 · 0 评论 -
hdu 1114 Piggy-Bank
链接:点击打开链接DP 背包#include#include#define INF 1000000int main(){ int t,i,j,e,f,n,num; int a[501],b[501],c[10001]; scanf("%d",&t); while(t--) { c[0]=0; for(i=1;i<=10001;i++)原创 2013-04-23 19:42:52 · 334 阅读 · 0 评论