就我这么奇葩错第二个点????
查看原帖
就我这么奇葩错第二个点????
181805
天马行空mz楼主2022/3/20 12:23
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 2000
int n,bj[maxn];//宝物数量,背包体积,按从大到小顺序用序号标记大小
double t;
double m[maxn],v[maxn],lk[maxn],xh[maxn];//性价比记录序号
bool cmp(double a,double b)
{
	return a>b;
}
int main()
{
	int flag=1;
	double sum=0;
	cin>>n>>t;
	for(int i=1;i<=n;i++)
	{
		cin>>m[i]>>v[i];//重量和价值
		lk[i]=v[i]/m[i];//价值与重量比
		xh[i]=lk[i];
	}
	sort(lk+1,lk+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(xh[j]==lk[i])
			{
				bj[flag]=j;
				flag++;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(t>=m[bj[i]])//如果背包体积大于当前性价比最高的物品的重量
		{
			t=t-m[bj[i]];//减去,留下剩余空间
			sum=sum+v[bj[i]];//加上价值
		}
		else//如果小于了,就把能装的装上去
		{
			sum=sum+t*(v[bj[i]]/m[bj[i]]);
			printf("%.2lf",sum);
			return 0;
		}
	}
	printf("%.2lf",sum);
	return 0;
}
2022/3/20 12:23
加载中...