动态规划

0-1 背包问题:若有物品 n 个,每个物品的价值 Value,用 vi 表示,每个物品的 重量 weight 用 wi 表示,其中 vi 和 wi 均为非负数。设背包的总容量为 W,且 W 为非负数。现需要考虑的问题是:如何选择装入背包的物品,使装入背包的 物品总价值最大。

 

 

#include"iostream"

#include"cstring"

using namespace std;

int max(int a, int b)

{

        return a > b ? a : b;

}

int main()

{

        int n, c, i;

        int w[100], v[100];

        int dp[10000];

                   cout<<"输入物品的数量";

        cin >> n ;

                   cout<<"输入背包的容量";

                   cin>> c;  

                   cout<<"请输入物品的价值"<<endl;

        for (i = 1; i <= n; i++)

                   {

                            cin >> v[i];

                            cout<<"物品"<<i<<"的价值为"<<v[i]<<endl;

                   }

        for (i = 1; i <= n; i++)

                   {

                            cout<<"物品"<<i<<"的重量为"<<endl;

                            cin >> w[i];

                   }

        memset(dp, 0, sizeof(dp));

        for (i = 1; i <= n; i++)

        {

                for (int j = c; j >= w[i]; j--)

                        dp[j] = max(dp[j], dp[j - w[i]] + v[i]);

        }

                   cout<<"背包能装的最大价值为";

        cout << dp[c] << '\n';

        return 0;

}

posted @ 2017-11-05 21:01  can丶  阅读(216)  评论(0编辑  收藏  举报