首页 > 其他 > 详细

洛谷4377(01分数规划)

时间:2019-05-01 11:52:28      阅读:168      评论:0      收藏:0      [点我收藏+]

二分答案,内部01背包一下重量大于等于W的最大价值是否大于等于0了。

#include <cstdio>
#include <algorithm>
using namespace std;

typedef long long ll;
const int maxn = 255, maxw = 1e3 + 5;
const ll INF = 1e18;

int N, W;
int w[maxn], t[maxn];

bool ok(int mid) {
    ll f[maxw];
    f[0] = 0LL;
    for (int i = 1; i <= W; i++)    f[i] = -INF;

    for (int i = 1; i <= N; i++)
        for (int j = W; ~j; j--)
            if (f[j] > -INF) {
                int k = min(W, j + w[i]);
                f[k] = max(f[k], f[j] + t[i] - (ll)w[i] * mid);
            }
    return f[W] >= 0;
}

int main() {
    scanf("%d %d", &N, &W);
    for (int i = 1; i <= N; i++)
        scanf("%d %d", &w[i], &t[i]), t[i] *= 1000;

    int l = 0, r = 1e6, ans;
    while (l <= r) {
        int mid = (l + r) >> 1;
        if (ok(mid))    l = mid + 1, ans = mid;
        else    r = mid - 1;
    }
    return !printf("%d\n", ans);
}

洛谷4377(01分数规划)

原文:https://www.cnblogs.com/AlphaWA/p/10799426.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!