本蒟蒻用dp写的,过不掉,80,求助。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
void read(int &x){
char c=getchar();
int k=1;
while(c<'0'||c>'9') {if(c=='-') k=-1;c=getchar();}
for(x=0;c>='0'&&c<='9';c=getchar())
x=x*10+c-'0';
x*=k;
}
const int N=1005;
int n,m,x,y,l,r,p,k,c[N],d[N];
struct fox{
int time,deli;
}a[N];
double f[N][N],s,ans,g[N][N],q[N][N];
bool operator<(fox x,fox y){
return 1.0*x.deli/x.time<1.0*y.deli/y.time;
}
int main(){
// freopen("time.in","r",stdin);
// freopen("time.out","w",stdout);
read(n);read(m);
for(int i=1;i<=n;i++) read(a[i].deli);
for(int i=1;i<=n;i++) read(a[i].time);
sort(a+1,a+n+1);
for(int i=1;i<=n;++i){
c[i]=a[i].deli;d[i]=a[i].time;
}
for(int i=1;i<=n;i++){
q[i][1]=c[i]*1.0/d[i];
f[i][1]=c[i];g[i][1]=d[i];
for(int j=2;j<=i;++j){
for(int k=1;k<i;++k){
if(k<j-1) continue;
if(q[i][j]<(f[k][j-1]+c[i])/(g[k][j-1]+d[i])){
q[i][j]=(f[k][j-1]+c[i])/(g[k][j-1]+d[i]);
f[i][j]=f[k][j-1]+c[i];
g[i][j]=g[k][j-1]+d[i];
}
}
}
}
printf("%.3lf",q[n][m]);
return 0;
}