1020 月饼

本题思路就是把输入的月饼的库存和总售价,转换为每吨的单价,在按照每吨单价高的进行排序,先将单价高的卖出去,再卖单价低的这样就可以实现出售额最大了。本题注意除了市场最大需求量时整型用int其他变量得用浮点数。

#include<stdio.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include<algorithm>
#include <vector> 
using namespace std;
bool s(pair<double, double>a, pair<double, double>b)
{
	if (a.second > b.second) {
		return 1;
	}
	else {
		return 0;
	}
	//return a.second >= b.second;
}
int main() {
	int n, number;
	int i;
	double temp;
	double sum=0;
	cin >> n >> number;
	vector<pair<double, double>>a(n);
	for (i = 0;i < n;i++) {
		cin >> a[i].first;
	}
	for (i = 0;i < n;i++) {
		cin >> temp;
		a[i].second = temp / a[i].first;
	}
	sort(a.begin(), a.end(), s);
	temp = 0;
	for (i = 0;i < n;i++) {
		temp += a[i].first;
		if (temp < number) {
			sum = sum + a[i].first * a[i].second;
		}
		else if (temp>=number){
			if (i == 0) {
				sum = number * a[i].second;
				cout << setiosflags(ios::fixed) << setprecision(2) << sum<<endl;
				break;
			}
			else {
				sum = sum + (a[i].first-(temp - number)) * a[i].second;
				cout << setiosflags(ios::fixed) << setprecision(2) << sum << endl;
				break;
			}
		}
	}
	if (temp < number) {
		cout << setiosflags(ios::fixed) << setprecision(2) << sum<<endl ;
	}
}