杭电的OJ居然通不过<bits/stdc++.h>这个头文件,需要小心
提供一个翻译版本
这里给两个版本
简单贪心拿下
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct Node{
double j,f,p;
//p是单价
}a[1001];
bool cmp(Node a,Node b){
return a.p>b.p;
}
int main(){
int m,n;
while(cin>>m>>n,m!=-1,n!=-1){
for(int i=0;i<n;i++){
cin>>a[i].j>>a[i].f;
a[i].p=a[i].j/a[i].f;
}
sort(a,a+n,cmp);
//五香豆的数量
double count=0;
for(int i=0;i<n;i++){
if(m>a[i].f) {
count+=a[i].j;
m-=a[i].f;
}
else{
count=a[i].p*m+count;
break;
}
}
printf("%.3lf\n",count);
}
return 0;
}
代码二
#include<bits/stdc++.h>
using namespace std;
struct mouse{
double j,f,rate;
}JavaBean[1005];
//重载cmp
bool cmp(mouse a,mouse b){
return a.rate>b.rate;
}
int main(){
while(1){
int m,n;
double res=0;
cin>>m>>n;
if(m==-1&&n==-1) break;
for(int i=0;i<n;i++){
cin>>JavaBean[i].j>>JavaBean[i].f;
//接近于算单价
JavaBean[i].rate=JavaBean[i].j/JavaBean[i].f;
}
sort(JavaBean,JavaBean+n,cmp) ;
for(int i=0;i<n;i++){
if(m>JavaBean[i].f){
res+=JavaBean[i].j;
m-=JavaBean[i].f;
}
else{
res=JavaBean[i].rate*m+res;
break;
}
}
printf("%.3lf\n",res);
}
return 0;
}