求助全部WA,思路是贪心,过了样例。
查看原帖
求助全部WA,思路是贪心,过了样例。
66097
tjhdyhj楼主2021/8/3 21:39

首先贴代码

#include <iostream>
#include <stdio.h> 
using namespace std;
struct bb{
	int m;
	int t;
	double p;
};
int main ()
{
	int N,M,i,j,lin,num1=0,num2=0;
	double a;
	bb d[103];
	cin>>N>>M;
	for (i=1;i<=N;i++)
	{
		cin>>d[i].m>>d[i].t;
		d[i].p=d[i].t/d[i].m;
		for (j=1;j<i;j++)
		{
			if (d[j].p<d[j+1].p)
			{
				lin=d[j].m;
				d[j].m=d[j+1].m;
				d[j+1].m=lin;
				lin=d[j].t;
				d[j].t=d[j+1].t;
				d[j+1].t=lin;
				lin=d[j].p;
				d[j].p=d[j+1].p;
				d[j+1].p=lin;
			}
		}
	}
	
	for (i=1;i<=N;i++)
	{
		if (M-num1>=d[i].m)
		{
			num1=num1+d[i].m;
			num2=num2+d[i].t;
		}
		else if (M-num1<d[i].m)
		{
			num2=(int)(num2*100+d[i].t*(M-num1)/d[i].m*100+0.5);
			num1=M;
		}
		if (num1==M)
		    break;
	}
	a=(double)num2/100;
	printf("%.2lf",a);
	return 0;
}

数据解释

  • N:即题目中原意义
  • M:即题目中的T
  • m:即mi
  • t:即vi
  • p:即m/t
2021/8/3 21:39
加载中...