栽在第一个数据,有没有大佬救一下
查看原帖
栽在第一个数据,有没有大佬救一下
1054807
TomRiddle楼主2023/8/21 22:18

有写注释,大佬们应该能看明白我的笨蛋思路
希望大佬不要改太多代码

#include <bits/stdc++.h>
using namespace std;
double n, t, sum;
double x, y, cc, c[105], z[105];//c是这类金币的平均价值,z[i]是c[i]类金币的总重量 
int main()
{
	cin>>n>>t;
	for (int i = 1;i <= n;i++)
	{
		cin>>x>>y;
		z[i] = x;//向z[i]中存储c[i]类金币的总重量 
		cc = y / x;//算出c[i]类金币的平均价值 
		c[i] = cc;
	}
	while (true)//冒泡排序,没什么好讲的 
	{
		bool ti = true;
		for (int j = 1;j < n;j++)
		{
			if (c[j] < c[j + 1])
			{
				swap(c[j], c[j + 1]);
				swap(z[j], z[j + 1]);
				ti = false;
			}
		}
		if (ti)
		{
			break;
		}
	}
	for (int i = 1;i <= n;i++)//从平均价值高的遍历到平均价值低的 
	{
		if (t >= z[i])//如果阿里巴巴的口袋能装下所有c[i]类金币 
		{
			sum += c[i] * z[i];//总数量增加所有c[i]类金币的总价值,即为z[i]*c[i] 
			t -= z[i];
	 }
		else
		{
			sum += c[i] * t;//否则口袋装不下那么多了,只能将总数量增加c[i]*t,即为口袋最大能装的c[i]金币 
			t = 0;
		}
	}
	if (t == 0)
	{
		printf("%.2f\n", sum);//最后保留两位小数输出
		return 0; 
	}
}
2023/8/21 22:18
加载中...