码迷,mamicode.com
首页 > 其他好文 > 详细

关于完全背包问题

时间:2016-07-13 13:28:48      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

还是使用动态规划(Dynamic Planning)

问题描述:

-------------------------------------------------------------------------------------------------------------------------

背包问题

设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为K,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于K,而价值的和为最大。
输入数据:
第一行两个数:物品总数N,背包载重量K;两个数用空格分隔;
第二行N个数,为N种物品重量;两个数用空格分隔;
第三行N个数,为N种物品价值; 两个数用空格分隔.
输出数据:
第一行总价值.
输入样例:
4 10
2 3 4 7
1 3 5 9
输出样例:
12

-------------------------------------------------------------------------------------------------------------------------

法一:

 1 #include "iostream"
 2 #include "cstdio"
 3 #define MAXN 8102050
 4 using namespace std;
 5 int n,w[MAXN],v[MAXN];
 6 int k;
 7 int f[MAXN];
 8 int main()
 9 
10 {   
11     cin>>n>>k;
12     for (int i=1;i<=k;i++)
13         f[i]=-2100000;
14     for (int i=1;i<=n;i++)
15         cin>>w[i];
16     for (int i=1;i<=n;i++)
17         cin>>v[i];
18     f[0]=0;
19     for (int i=1;i<=n;i++)
20     for (int wei=w[i];wei<=k;wei++)
21         f[wei]=(f[wei-w[i]]+v[i]>f[wei])?f[wei-w[i]]+v[i]:f[wei];
22     cout<<f[k];
23     return 0;
24 }

法二:

待续....

关于完全背包问题

标签:

原文地址:http://www.cnblogs.com/RoitAGI/p/5666385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!