贪心算法是好理解的,是简单的,但是困难的可能是结构体的应用,stl的使用等等,下面这道题就体现了这一点。
这道题主要要算单价,通过比较单价来排序,并计算。
如果单开数组,排完单价,不能将这一顺序copy到另外两个指标上,但是结构体可以很好的完成这一点。
AC代码示例
cpp
#include<bits/stdc++.h>
using namespace std;
struct Node{
double v,m,p;
}a[105];
bool cmp(Node a,Node b){
return a.p>b.p;
}
double sum,t;
int n;
int main(){
sum=0;
cin>>n>>t;
for(int i=0;i<n;i++){
cin>>a[i].m>>a[i].v;
a[i].p=a[i].v/a[i].m;
}
sort(a,a+n,cmp);
//降序
for(int i=0;i<n;i++){
if(t>=a[i].m) {
t-=a[i].m;
sum+=a[i].v;
}
else{
sum+=a[i].p*t;
break;
}
}
//cout<<t<<endl;
printf("%.2lf",sum);
return 0;
}