题目链接:http://bailian.openjudge.cn/practice/4110/
题意:简单的贪心算法,每次取价值/重量比最大的
注意:进行排序的时候要不就是a<b要不就是a>b,不可以使用a>=b
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
struct point {
int v,w;
point (int a,int b){
v=a;
w=b;
}
point(){
v=0;
w=0;
}
};point all[105];
bool compare(point a,point b){
return a.v/a.w>b.v/b.w;
}
int main(){
int n,m;
cin>>n>>m;
int a,b;
for(int i=0;i<n;i++){
cin>>a>>b;
all[i]=point(a,b);
}
sort(all,all+n,compare);
int size=0;
double total=0.0;
for(int i=0;i<n;i++){
if(size+all[i].w<m){
size+=all[i].w;
total+=(double)all[i].v;
}else if(size+all[i].w==m){
total+=(double)all[i].v;
break;
}else
{
total+=(double)(m-size)*(double)(all[i].v/all[i].w);
break;
}
}
printf("%.1f\n",total);
return 0;
}