分数规划学习、

来源:互联网 发布:mac nice to meet you 编辑:程序博客网 时间:2024/05/29 12:36

 学习博客:传送门

POJ 2976模板题、

#include <cstdio>#include <cstring>#include <cmath>#include <sstream>#include <iostream>#include <algorithm>#include <string>#include <stack>#include <queue>#include <vector>#include <map>#include <set>#include <utility>using namespace std;#define LL long long#define pb push_back#define mk make_pair#define pill pair<int, int>#define ft first#define sd second#define mst(a, b)memset(a, b, sizeof a)#define REP(i, x, n)for(int i = x; i <= n; ++i)const int qq = 1000 + 10;const int MOD = 1e9 + 7;const int INF = 1e9 + 10;const double eps = 1e-7;double a[qq], b[qq];double d[qq];int n, k;double Check(double L) {double sum = 0;for(int i = 0; i < n; ++i) {d[i] = a[i] - b[i] * L;}sort(d, d + n);for(int i = k; i < n; ++i) {sum += d[i];}return sum;}int main(){while(scanf("%d%d", &n, &k) != EOF) {if(!n && !k)break;for(int i = 0; i < n; ++i) {scanf("%lf", a + i);}double l = INF, r = -INF;for(int i = 0; i < n; ++i) {scanf("%lf", b + i);l = min(l, a[i] * 1.0 / b[i]);r = max(r, a[i] * 1.0 / b[i]);}double ans = l;while(r - l > eps) {double mid = (l + r) / 2.;if(Check(mid) > 0) {ans = mid;l = mid;} else {r = mid;}}printf("%.0f\n", ans * 100.);}return 0;}


原创粉丝点击