完全背包使用一维数组

来源:互联网 发布:淘宝汽车用品店排名 编辑:程序博客网 时间:2024/06/04 21:01
对于01背包和完全背包,无论是空间复杂度还是时间复杂度,最优的方法还是使用一维数组进行实现。

基于01背包的分析,由于不必考虑物品的重复放入,故v的循环采用顺序即可。代码如下:
#include
using namespace std;
 
 
int maxV[201];    
int weight[11];
int value[11];
int V, N;
 
void main()
{
    int i, j;
    scanf("%d %d",&V,&N);
    for(i = 0; i < N;++i)
    {
       scanf("%d%d",&weight[i],&value[i]);
    }
    for(i = 0; i < N;++i)
    {
       for(j = weight[i]; j <= V; ++j) 
       {
           int tmp =maxV[j-weight[i]]+value[i];
           maxV[j] =(maxV[j] > tmp) ? maxV[j] : tmp;
       }
    }
   printf("%d",maxV[V]);
}
0 0