天天看點

PAT甲級_1070 Mooncake (25 分)

題目描述

思路:

注意給出的是總價,算出單價後先賣單價最高的即可,另外注意都要用double

代碼:

#include <bits/stdc++.h>
using namespace std; 

struct Mcake{
	double inv, pri, pp;//庫存,總價,單價 
};
Mcake mc[1010]; 
int cmp(Mcake a, Mcake b){
	return a.pp>b.pp;
}

int main()
{
	int n;
    double d;
	cin>>n>>d;
	for(int i=0;i<n;i++) cin>>mc[i].inv;
	for(int i=0;i<n;i++) cin>>mc[i].pri;
	for(int i=0;i<n;i++) mc[i].pp = mc[i].pri/mc[i].inv;
	sort(mc, mc+n, cmp);
	double pro = 0;
    int idx=0;
	while(d>0&&idx<n){//别忘了idx<n,因為可能總庫存也不夠需求量
		if(mc[idx].inv<=d){
			d -= mc[idx].inv;
			pro += mc[idx].pri;
		}else{
			pro += mc[idx].pp*d;
			d = 0;
		}
		idx++;
	}
	printf("%.2f\n",pro);
	return 0;
}