非常简单的一道贪心题,本苟蒻也是很轻易地一遍过(因为忽略了数据精度,所以第一遍0分,哈哈哈)
没有什么多余的操作,开一个结构体数组,将单价最高的排在前面,然后遍历判断即可。
下面是AC代码:
#include<bits/stdc++.h> //万能头
using namespace std;
int main(void)
{
struct node //定义一个结构体数组
{
double sl;
double zj;
double dj;
};
struct node q[101];
double n,backpack,sum=0;
cin>>n>>backpack;
for(int i=0;i<n;i++){
cin>>q[i].sl>>q[i].zj;
q[i].dj=q[i].zj/q[i].sl;
}
for(int i=0;i<n;i++){ //冒泡排序
for(int j=i+1;j<n;j++){
if(q[j].dj>q[i].dj){
struct Q temp;
temp=q[i];
q[i]=q[j];
q[j]=temp;
}
}
}
for(int i=0;i<n;i++){
if(backpack-q[i].sl>-0.000001){sum+=q[i].zj;backpack-=q[i].sl;} //double型不能直接相等
else {sum+=(backpack*q[i].dj);break;}
}