51nod1086(多重背包&二進制)】的更多相关文章

題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1086 題意:中文題誒- 思路:很顯然這是一道多重背包題,不過這裏的數據有點大,如果將物品一個一個地拆分爲開再用01背包做的話時間復雜度 爲O(n*w*ci)=200*5000*200=2e9,顯然是會超時的: 那麼不妨往二進制方向想一想,任何數都可以寫成:2^a1+2^a2+2^a3...... 反之則有對於任意數 ci,0~ci的所有數都可以由 2^0, 2…
写在前面:我是一只蒟蒻~~~ 今天我们要讲讲动态规划中~~最最最最最~~~~简单~~的背包问题 1. 首先,我们先介绍一下  01背包 大家先看一下这道01背包的问题  题目  有m件物品和一个容量为n的背包.第i件物品的大小是w[i],价值是k[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大.    题目分析:我们刚刚看到这个题目时,有的人可能会第一想到贪心,但是经过实际操作后你会很~~神奇~~的发现,贪心并不能很好的解决这道题(没错,本蒟蒻就是这么错出来的)…
网上说是多重背包,因为要输出方案,还要记录下路径,百度一下题解就可以. 自己做的时候,还没了解过多重背包,该题直接往完全背包思考了.咖啡的钱看作总的背包容量,1.5.10.25分别代表四种物品的重量,可以取多次,但是有限制数量.设dp[j]为咖啡的价格为j时,所能花费的最多钱币数此外建立一个二维数组num[j][i],表示咖啡的价格为j时,花费的第i种货币的个数 状态转移方程:dp[j]=max(dp[j],dp[j-v[i]]+1)初始条件:dp[j]=-1,dp[0]=0; num[j][i…
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 22553    Accepted Submission(s): 9524 Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市…
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 25827 Accepted: 8741 Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony opened his money-box and found there were some coin…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意 : 按顺序读入一些列数,所对应的序列代表价值,数值代表个数(如a[5]=6 ,代表价值为五的钻石个 ), 通过计算判断这些钻石能否被平均分成二等分: 分析:已知正常多重背包复杂度为O((ΣN[i])V),这里(ΣN[i])<=120000,V<=60000;如果直接进行多重背包肯定超时.所以我们用二进制优化的多重背包. 这个复杂度为O(V*log((ΣN[i]))),优化了许多...至…
Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最多能采购多少公斤粮食呢? 后记:人生是一个充满了变数的生命过程,天灾.人祸.病痛是我们生命历程中不可预知的威胁.月有阴晴圆缺,人有旦夕祸福,未来对于我们而言是一个未知数.那么,我们要做的就应该是珍惜现在,感恩生活——感谢父母,他们给予我们生命,抚养…
题目大意:有n个单词,m的耐心,每个单词有一定的价值,以及学习这个单词所消耗的耐心,耐心消耗完则,无法学习.问能学到的单词的最大价值为多少. 题目思路:很明显的01背包,但如果按常规的方法解决时间复杂度O(n)=1e9,会超时.因为每个单词的价值和代价都不超过10,所以可以用二维数组G[V][W],记录价值为V,代价为W的单词的个数,并用多重背包的思路解决. #include<cstdio> #include<stdio.h> #include<cstdlib> #in…
题意:给出价值为1,2,3,4,5,6的6种物品数量,问是否能将物品分成两份,使两份的总价值相等. 思路:求出总价值除二,做多重背包,需要二进制优化. 代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std; int n[7]; int v,sum; bool flag; int dp[100000]; /*完全背包*/ void CompletePack(int cos…
今天写题的时候碰到了一道完全背包题,可是没有看出来,乱写了一通,浪费了一个晚上,顺便复习一下背包的知识 01背包 每种物品只能选择一次或者不选,求背包容量内的最大价值 先给出状态转移方程: f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]); 解释一下:f[i][j]表示的是前i个物品中,背包容量为j时,得到的最大价值:如果在容量为j时选择不放第i个物品,那么f[i][j]=f[i-1][j],f[i-1][j]表示前一个物品在容量j时的状态值:如果在容量为j时…