题目:https://www.acwing.com/problem/content/236/
题意:给你一个方程,可以有k个不选,要求最优
思路:看了一下这个方程就知道是01分数规划的模板题,它可以选择k个不要,其实也就是排序的时候选最好的n-k个即可
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <algorithm> #include <string.h> #include <vector> #include <math.h> #include <limits> #include <set> #include <map> using namespace std; int n,k,a[2333],b[2333]; double ps[2333]; bool ok(double x) { for(int i=1;i<=n;i++) ps[i]=a[i]-x*b[i]; sort(ps+1,ps+1+n); double ans=0; for(int i=n;i>=k+1;i--) ans+=ps[i]; return ans>=0; } void sol() { for(int i=1;i<=n;i++) scanf("%d",a+i); for(int i=1;i<=n;i++) scanf("%d",b+i); double l=0,r=1; while(r-l>1e-6) { double mid=(l+r)/2; if(ok(mid)) l=mid; else r=mid; } printf("%.0lf ",l*100); } int main() { while(scanf("%d%d",&n,&k),n|k) sol(); }