文章分类 -  背包问题

摘要:我们以HDU 1171 Big Event in HDU 为例代码来源:http://growthinking.com/archives/844 1 #include<stdio.h> 2 #include<string.h> 3 int n,v[55],num[55],all,sum,dp[250005]; 4 inline int max( int a,int b ) 5 { 6 return a > b ? a : b; 7 } 8 void zo( int v,int w ) 9 {10 for( int j = sum; j >= v; --j ) 阅读全文
posted @ 2011-07-25 20:06 贺佐安 阅读(393) 评论(0) 推荐(0) 编辑
摘要:P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那 阅读全文
posted @ 2011-07-25 13:34 贺佐安 阅读(5780) 评论(0) 推荐(0) 编辑
摘要:P01: 01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个 阅读全文
posted @ 2011-07-25 13:11 贺佐安 阅读(151079) 评论(14) 推荐(46) 编辑
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>#definemax1010structbone{intve,value;}num[max];intT,N,V,Mv[max];intcmp(inta,intb){returna>b?a:b;}intmain(){scanf("%d",&T);while(T--){scanf("%d%d",&N,&V);for(inti=1;i<=N;i++)scanf("%d&quo 阅读全文
posted @ 2011-07-25 12:13 贺佐安 阅读(194) 评论(0) 推荐(0) 编辑