背包问题之完全背包

完全背包:

有n种物品,每种物品有无限个,每个物品的重量为w[i],价值为v[i]。现在有一个背包,它所能容纳的重量为C,问:你的背包所能带走的最大价值是多少?

 

之前01背包分析过了,如果是顺序的话,就表示同一物品可以多次放入!这就是完全背包!就是这么神奇!

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int w[105], val[105];
 6 int dp[1005];
 7 
 8 int main()
 9 {
10     int t, m, res=-1;
11     cin >> t >> m;
12     for(int i=1; i<=m; i++)
13     {
14         cin >> w[i] >> val[i];
15     }
16     for(int i=1; i<=m; i++) //物品 
17     {
18         for(int j=0; j<=t; j++) //容量 
19         {
20             if(j >= w[i])
21                 dp[j] = max(dp[j-w[i]]+val[i], dp[j]);
22             
23         }
24         for(int k=1; k<=t; k++)
25                 cout << dp[k] << " ";
26             cout << endl;
27     }
28         
29     cout << dp[t] << endl;
30     return 0;
31 }

 

posted @ 2015-04-08 11:59  dominjune  阅读(209)  评论(0编辑  收藏  举报