加载中...

二维背包

樱果运算

https://ac.nowcoder.com/acm/contest/37160/J
因为每次给的要啦的货是变量 体积1是几辆车 体积2是多少钱 当给出多个价钱和 只要输出对应f[][]载货量 就可以

#include <iostream>

using namespace std;

const int N = 110, M = 1010;

int dp[N][M];        // N辆车M元最多载多少货
int e[N], t[N];
int n, m;
int x, y;

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        cin >> e[i] >> t[i];
    }

    for (int i = 1; i <= n; i++) // 第i辆车
    {
        for (int j = i; j >= 1; j--)
        {
            for (int k = M - 1; k >= e[i]; k--)//枚举的k要大于体积才有用
            {
                dp[j][k] = max(dp[j][k], dp[j - 1][k - e[i]] + t[i]);
            }
        }
    }    

    for (int i = 1; i <= m; i++)
    {
        cin >> x >> y;
        int res = -1;
        for (int  j = 1; j <= n; j++)
        {
            if (dp[j][x] >= y)
            {
                res = j;
                break;
            }
        }
        cout << res << endl;
    }
    return 0;
}
posted @ 2022-07-21 18:07  liang302  阅读(32)  评论(0编辑  收藏  举报