01背包问题

大二下学期开的算法设计与分析课程老师说是研究生才要学的课,但是我们大二就要学! 虽然有难度,但还是要学滴。(现在我大四了回过来一看 好简单的说)

代码虽然不长,但是还是。。很有。。技术含量的

    #include<iostream>
    using namespace std;

    #define N 3 // N件宝贝
    #define V 5 // C是背包的总capacity



    int main()
    {
        int value[N + 1]  = {0, 60, 100, 120}; // 钱啊
        int weight[N + 1] = {0, 1,  2,  3};    // 重量
        int f[N + 1][V + 1] = {0}; // f[i][j]表示在背包容量为j的情况下, 前i件宝贝的最大价值

        int i = 1;
        int j = 1;
        for(i = 1; i <= N; i++)
        {
            for(j = 1; j <= V; j++)
            {
                // 递推关系式出炉
                if(j < weight[i])
                {
                    f[i][j] = f[i - 1][j];
                }
                else
                {
                    int x = f[i - 1][j];
                    int y = f[i - 1][j - weight[i]] + value[i];
                    f[i][j] = x < y ? y : x;
                }
            }
        }

        for(i = N; i >= 1; i--)
        {
            for(j = 1; j <= V; j++)
            {
                printf("%4d ", f[i][j]);
            }

            cout << endl;
        }


        for(i = N; i >= 1; i--)
        {
            for( j = 1; j <= V; j++)
            {
                printf("%4d ", f[i][j]);
            }

            cout << endl;
        }

        return 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值