多重背包,多种解法,动态规划
2013-10-31 20:27
267 查看
有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
这个问题也进行了一下总结:并按思路把算法实现了一下:
这个问题也进行了一下总结:并按思路把算法实现了一下:
#include<stdio.h> #include<string.h> #define MAX 20 #define MAXM 20 #define MAXN 10 #define min(a,b) a>b?b:a /* 背包问题 基本思路 二维 */ void CP(int m,int n,int*w,int*p,int*tag) { int f[MAXN][MAXM]; memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int k=0;k<=(min(j/w[i],tag[i]));k++) { f[i][j]=f[i-1][j]>f[i-1][j-k*w[i]]+k*p[i]?f[i-1][j]:f[i-1][j-k*w[i]]+k*p[i]; } } } for(int x=1;x<=n;x++) { for(int y=1;y<=m;y++) { printf("%d\t",f[x][y]); } printf("\n"); } } void main() { int m,n; scanf("%d%d",&m,&n); int w[MAX]; int p[MAX]; int tag[MAX]; for(int i=1;i<=n;i++) { scanf("%d%d%d",&w[i],&p[i],&tag[i]); } CP(m,n,w,p,tag); }
#include<stdio.h> #include<string.h> #define maxn 101 #define max(a,b) a>b?a:b int main() { int cash,kind,cost[maxn],get[maxn],num[maxn],f[10000]; int i,j,k; memset(f,0,sizeof(f)); scanf("%d%d",&cash,&kind); for(i=1;i<=kind;i++) { scanf("%d%d%d",&cost[i],&get[i],&num[i]); } for(i=1;i<=kind;i++) { for(j=1;j<=num[i];j++) { for(k=cash;k>=cost[i];k--) { f[k]=max(f[k],f[k-cost[i]]+get[i]); } } } printf("%d\n",f[cash]); return 0; }
相关文章推荐
- POJ3181 Dollar Dayz 动态规划 背包解法 解题报告
- 0-1背包问题--动态规划解法
- 0-1背包问题的两种解法(回溯法和动态规划)
- 0-1背包问题及其动态规划求解之二——王晓东的书本解法
- 01背包问题 动态规划解法
- 01背包问题(当有的背包重量是非整数时)的递归(优化成动态规划+再用滚动数组优化)解法+一些动态规划(递归,搜索)的高级技巧
- 【动态规划】 Google面试题 爬楼梯问题 斐波那契问题的多种解法
- 完全背包 多种解法 动态规划
- java--0-1背包问题--动态规划解法
- [动态规划]背包问题九讲(1)----01背包问题
- 普及练习场 动态规划的背包问题 开心的金明
- LeetCode 322. Coin Change Python 动态规划/BFS解法
- 动态规划解决0-1背包问题
- 完全背包 动态规划 模版
- uva 12563(动态规划起步第三天 01背包变形)
- 1068 乌龟棋 ------背包问题(动态规划)
- 动态规划之01背包,完全背包,多重背包
- hdu 1171 Big Event in HDU 母函数解法。。以后再来用背包A一下
- 动态规划 背包问题(01背包&&完全背包&&多重背包) 个人心得 4.0版本and部分尚未完善 _清风明月
- 分组背包问题解法