POJ 2976 Dropping tests(01分数规划)

来源:互联网 发布:教小孩子编程 编辑:程序博客网 时间:2024/05/21 22:32

01分数规划

代码:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1005;typedef long long ll;int n, k;double a[N], b[N], tmp[N];bool cmp(double a, double b) {    return a > b;}int main() {    while (~scanf("%d%d", &n, &k) && n || k) {        for (int i = 0; i < n; i++) scanf("%lf", &a[i]);        for (int i = 0; i < n; i++) scanf("%lf", &b[i]);        double l = 0, r = 1e15;        for (int i = 0; i < 200; i++) {            double mid = (l + r) / 2;            for (int j = 0; j < n; j++) tmp[j] = a[j] - b[j] * mid;            sort(tmp, tmp + n, cmp);            double sum = 0;            for (int j = 0; j < n - k; j++) sum += tmp[j];            if (sum < 0) r = mid;            else l = mid;        }        printf("%lld\n", (ll)(l * 100 + 0.5));    }    return 0;}


0 0
原创粉丝点击