本来在看《最小割模型在信息学竞赛中的应用》

中间蹦出了“分数规划”四个字。突然想起来,校赛被这道题搞过(当时因为数据水白嫖了一发

现在来学习一下。

分数规划是不符合贪心的!

比如一组数据

cost   12 4 15

value 15 5 25

第一个和第二个的比值是一样的 但是他们分别和第三个一起取的时候的出来的答案是不一样的

 

Dropping tests

入门题。

二分版本

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <functional>
#define ll long long
using namespace std;

const double EPS = 1e-5;
const int N = 1010;
double a[N], b[N];
double rate[N];

int main() {
    int n, m;
    while (~scanf("%d%d", &n, &m) && (n + m)) {
        m = n - m;
        for (int i = 1; i <= n; i++) scanf("%lf", &a[i]);
        for (int i = 1; i <= n; i++) scanf("%lf", &b[i]);
        double l = 0, r = 100;
        while (r - l > EPS) {
            double mid = (l + r) / 2.0;
            for (int i = 1; i <= n; i++) rate[i] = 100 * a[i] - mid * b[i];
            sort(rate + 1, rate + 1 + n, greater<double>());
            double check = 0;
            for (int i = 1; i <= m; i++) check += rate[i];
            if (check > EPS) l = mid;
            else r = mid;
        }
        printf("%.0f\n", r);
    }   
    return 0;
}
View Code

相关文章: