随笔分类 - 背包
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3732题目大意:阿辉要记单词,所有单词的长度都不超过10个字符,每个单词都有一定的价值跟复杂性,知道每个单词的价值跟复杂性都写下来了,阿辉写单词的总的复杂度不能超过C,要你求阿辉可以得到的最大价值。解题思路:乍一看本题为一个简单0 1背包问题,但用0 1 背包做的时间复杂度为10^9在一秒中内不可能完成,但细看题目后发现Vi和Ci都小于等于10也就是说价值和费用的种类总共只有一百种,只需要统计所有价值、费用相同的数目及可以将问题转化为一个多重背包问题。源码及注释:#include#includein
阅读全文
摘要:题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2639第K优解问题其基本思想是将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并。这里仍然以01背包为例讲解一下。首先看01背包求最优解的状态转移方程:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。如果要求第K优解,那么状态f[i][v]就应该是一个大小为K的数组f[i][v][1..K]。其中f[i][v][k]表示前i个物品、背包大小为v时,第k优解的值。 “f[i][v]是一个大小为K的数组”这一句,熟悉C语言的同学可能比较
阅读全文
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2955题目大意:有一个小偷要偷银行的钱,可是他偷没家银行总是有一定的概率被抓,现在给了你一个概率P,只要他被抓的概率乘积不大与P,他就是安全的。问你在他安全的情况下,他最多可以偷多少钱。容量为银行钱的总和,价值就是偷到的钱,花费就是被抓的概率。dp方程:dp[j] = Max(dp[j],dp[j-w[i]]*(1-p[i])) #include#include#includeint w[101];float dp[10005];int main(){ int t,n,i,j,sum; float p,
阅读全文
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2159二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。简单二维费用背包问题,解题源代码及注释如下:#include#includeint a[100],b[100],dp[1001][1001];int main(){ i
阅读全文
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2844本题为简单多重背包,解题源码及注释如下:#include#includeint w[101],c[101],dp[100100];int max(int a,int b){ return a > b ? a : b;}int main(){ int n,m,num; int i,j,k; while(scanf("%d%d",&n,&m) != EOF && (m||n)) { for(i = 0; i m)//完全背包 { for(j =
阅读全文
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1171本题为一个简单的多重背包问题。解题源码及注释:#include#includeint max(int a,int b){ return a > b ? a : b;}int main(){ int N,sum,V,i,j,k; int w[51],n[51];//w[i]用来保存第i件物品的价值,此题中费用与同一物品的价值相等,n[i]用来保存第i件物品的数量 int dp[250000];//总价值最大为250000 while(scanf("%d",&N) ,
阅读全文
摘要:Cash MachineTime Limit: 1000MSMemory Limit: 10000KTotal Submissions: 19960Accepted: 6954DescriptionA Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount. The machine uses exactly N distinct bill denominations, say Dk, k=
阅读全文

浙公网安备 33010602011771号