背包问题之完全背包
完全背包:
有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 }