问题描述:
圣诞节要到了,Choice准备发一些糖果作为礼物,有n种糖果,每种糖果有mi个,糖果的价格为pi(pi是mi个糖果加起来的总价格),每种糖果都可以拆成任意个带走,但是Choice最多只能拿w个糖果,当然Choice不是一个吝啬的人,她尽可能的拿贵的糖果,请问Choice最多能带走多大价值的糖果?
原因分析:
for里的 i ,sort里的 n 都不能是小数,不能定义为double 等
解决方案:
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef struct tg{double tp,num,p;
}T;
bool cmp(T a,T b)
{return a.p>b.p;
}
int main(void)
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n;double w;while(cin>>n>>w){T a[1005];int i,j;double sum=0,count;for(i=0;i<n;i++){cin>>a[i].tp>>a[i].num;a[i].p=a[i].tp/a[i].num;}sort(a,a+n,cmp);for(i=0;i<n;i++){if(w>0){count=min(a[i].num,w);sum+=a[i].p*count;w-=count;}elsebreak;}cout<<fixed<<setprecision(1)<<sum<<endl;}return 0;
}