背包问题最全最简算法

背包容量V=5

物品数量N=3

求背包装下的最大价值。

ps:for循环条件部分仔细推敲会对受益匪浅。

#include <iostream>

using namespace std;


#define N 3
#define V 5
int main()
{
        int a[N+1] ={0,60,100,120};//value
        int b[N+1] ={0,1,2,3};//capacity
        int c[4]   ={0,1,1,1};//num
        int m[V+1]={0};//a[i][j]表示j空间装的最大价值
        for(int i=1;i<=N;i++)
                for(int k=1;k<=c[i];k++)
                        for(int j=V;j>=b[i];j--)
                        {
                        int x = m[j];
                        int y = m[j-b[i]]+a[i];
                        m[j] = x > y ? x : y ;
                        }
        for(int i=0;i<V+1;i++)
        cout << m[i]<<"\t";
        return 0;
}
阅读更多

没有更多推荐了,返回首页