动态规划之背包问题(持续更新)

一、01背包:

n个物品,每个物品有其重量和价值。你的背包装物品的总重量不能超过 m ,求获得的最大价值。

模板题:HDU - 2602 Bone Collector

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 1100

int main()
{
    int t;
    scanf("%d", &t);
    for (int ca = 1; ca <= t; ca++)
    {
        int n, m;
        int f[maxn][maxn], v[maxn], w[maxn];
        memset(f, 0, sizeof(f));

        scanf("%d%d", &n, &m);

        for (int i = 1; i <= n; i++)
            scanf("%d", &v[i]);
        for (int i = 1; i <= n; i++)
            scanf("%d", &w[i]);

        for (int i = 1; i <= n; i++)
            for (int j = 0; j <= m; j++)
            {
                f[i][j] = f[i-1][j];
                if (j >= w[i])
                    f[i][j] = max(f[i-1][j], f[i-1][j-w[i]]+v[i]);
            }
            
        printf("%d\n", f[n][m]);
    }
}

猜你喜欢

转载自www.cnblogs.com/ruthank/p/9424794.html