(贪心)一维数组解完全背包问题(物品可无限重复选)——算法笔记

题目: 
有n件物品和容量为m的背包 给出i件物品的重量以及价值 求解让装入背包
的物品重量不超过背包容量 且价值最大 
区别:
完全背包问题可以重复选择!	
相对于二维数组的解法节省了空间,每一次循环都会刷新f[] 
#include

using namespace std;

int w[500],v[500];
int f[500];

int main()
{
    int n,m;
    cin>>n>>m;
       
    for(int i=1;i<=n;i++)
	{
        cin>>w[i]>>v[i];
    }
    
    for(int i=1; i<=n; i++)
	{
		for(int j=w[i]; j<=m; j++)
		{
			//f[j] max { f[j],f[j-w[i]] + v[i] }
        	if( f[j-w[i]]+v[i] > f[j] )		//第 i 个物品可要多次 	//上次f[]就存在重复要了 
        	{
        		f[j] = f[j-w[i]]+v[i];
			}	
    	}
	}
    
    cout<<f[m]<<endl;//最优解
   
}

你可能感兴趣的:(C++算法笔记)