0/1背包问题(DP)】的更多相关文章

  今天第一次接触了0/1背包问题,总结一下,方便以后修改.不对的地方还请大家不啬赐教! 上一个蓝桥杯的例题: 数据规模和约定 代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int m =sc.nextInt(); int[][] a =new…
0,1背包问题:我写笔记风格就是想到哪里写哪里,有很多是旧的也没删除,代码内部可能有很多重复的东西,但是保证能运行出最后效果 '''学点高大上的遗传算法''' '''首先是Np问题的定义: npc:多项式复杂程度的非确定性问题, 首先是基本的0-1背包问题. ''' '''给定N个物品和一个背包,物品i的质量是Wi,其价值位Vi,背包的容量为C,问应该 如何选择装入背包的物品,使得转入背包的物品的总价值为最大? 在选择物品的时候,对每种物品i只有两种选择,即装入背包或不装入背包.不能将 物品i装…
题意:硬币分别有 A1.....An种,每种各有C1......Cn个,问组成小于m的有多少种 思路:多重背包问题 dp[i][j]表示用前i种硬币组成j最多剩下多少个  dp=-1的表示凑不齐 dp[0][0]=0; for(int i=0;i<n;i++)     for(int j=0;j<=m;j++) {    if(dp[i][j]>=0)   dp[i+1][j]=c[i];  //表示用前i种可以凑齐j元,自然就全部剩下了       else if(j<a[i]|…
摘要: 使用动态规划法求解0/1背包问题. 难度: 初级 0/1背包问题的动态规划法求解,前人之述备矣,这里所做的工作,不过是自己根据理解实现了一遍,主要目的还是锻炼思维和编程能力,同时,也是为了增进对动态规划法机制的理解和掌握. 值得提及的一个问题是,在用 JAVA 实现时, 是按算法模型建模,还是用对象模型建模呢? 如果用算法模型,那么 背包的值.重量就直接存入二个数组里:如果用对象模型,则要对背包以及背包问题进行对象建模.思来想去,还是采用了对象模型,尽管心里感觉算法模型似乎更好一些.有时…
Description 给定 n 个物品和一个背包.物品 i 的重量是 wi ,其价值为 vi ,背包的容量为 C .问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大? Input 输入的第一行为测试样例的个数 T ,接下来有 T 个测试样例. 每个测试样例的第一行是物品个数 n(1 ≤ n ≤ 3500)和背包容量 C(C ≤ 13000),接下来 n 行,每行两个正整数 wi 和 vi ( wi ≤ 1000,  vi ≤ 1000 ),分别表示第 i 件物品的重量 wi 及其…
原题: ZOJ 3769 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3769 一个带有一些限制的背包问题. 假设在没有限制的情况下,那么定义:dp[i][j]表示在前 i 类物品中,总的Toughness为 j 的时候最大的伤害值. 取到第K类的第x个物品时(属性值为D,T),则有转移方程: dp[K][j+T] = max(dp[K][j+T],dp[K-1][j]+D) .其中j+T超过m时按m算就可以了. 但是…
题目链接 终于过了,边界让我wa了好几次,猥琐的用AC代码对拍,很无奈,用非常麻烦的方法.写一下,估计以后再碰到,肯定看不懂这是写的什么了. 以前做过,统计1和2的,统计0比1和2麻烦多了,有前导0的情况,不太好弄. 算是用统计方法,先把sp[len-1]所有的加上,长度为len-1的情况. 然后就是长度为len的情况.从高位到低位,遍历. 如果此位是0,judge(str+1) + 1 + dfs(str+1),是统计当前为是0的,多少情况,但是会漏解,算是受以前那个题统计1和2的影响把. 如…
利用记忆化数组.记dp[i][j]为根据rec的定义,从第i个物品开始挑选总重小于j时,总价值的最大值. 递推式: dp[i][j]=0     (j<w[i]) dp[i][j] dp[i][j]= max(dp[i+1][j],dp[i+1][j-w[i]]+v[i]) 反向: int dp[MAX][MAX]; //DP数组 void solve() { ; i>=; i--){ ; j<=W; j++){ if(j<w[i]){ dp[i][j]=dp[i+][j]; }…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22401    Accepted Submission(s): 8959 Problem Description Speakless很早就想出国,现在他已…
有n个物品,重量和价值分别为wi和vi,从这些物品中挑选出重量不超过W的物品,求所有挑选方案中物品价值总和的最大值 限制条件: 1 <= n <= 100; 1 <= wi,vi <= 100; 1 <= W <= 10000; 分析:经典的01背包问题 状态:dp[i][j] = 前i个物品中挑选重量不超过j的价值最大值 状态转移方程:dp[i+1][j] = max(dp[i][j], dp[i][j - w[i]] + v[i]); 利用翻滚数组即一维数组可以大大…