所以说为什么就第一个AC了捏
查看原帖
所以说为什么就第一个AC了捏
350236
Syctem_楼主2022/10/20 14:05

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct data
{
	int index;//堆数
	int m;//质量
	int v;//价值
	int arvv;//平均价值
}coin[101];

bool cmp(data a,data b)
	{
		return (a.arvv>b.arvv);//降序排序
	}

int main(void)
{
	int i,n,pack,flag;
	double taken;
	flag=0;
	taken=0;
	scanf("%d",&n);
	scanf("%d",&pack);//输入堆数、背包容量
	for(i=0;i<n;i++)
	{
		scanf("%d",&coin[i].m);
		scanf("%d",&coin[i].v);
		coin[i].index=i+1;
		coin[i].arvv=coin[i].m/coin[i].v;//输入每堆信息
	}
	sort(coin+1,coin+n+1,cmp);//按平均价值排序
	for(i=0;i<n;i++)
	{
		if(pack>=coin[i].m)
		{
			taken=taken+(double)(coin[i].v);//容量大于质量,全拿
			pack=pack-coin[i].m;
		}
		else
		{
			taken=taken+(pack*1.0/coin[i].m*1.0)*(coin[i].v*1.0);//容量小于质量,拿能拿的部分
			flag=1;
		}
		if(flag==1)
		{
			break;//跳出循环 
		}
	}
	printf("%.2lf",taken);//结果 
	
	return 0;
}
2022/10/20 14:05
加载中...