代码改变世界

奋战杭电ACM(DAY5)1009

2013-08-28 19:36  百里小问  阅读(107)  评论(0编辑  收藏  举报

又干了一题,今天感觉不错呀!大笑再接再厉!晚上继续!!奋斗

不知不觉原来用到了昨天看的贪心算法~~~用了才知道这个算法就是贪心,看来还不熟练,继续加油练习!!

FatMouse' Trade

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
	int M,N,i,k;
	double javabean,tmp;
	
	while(cin >> M >> N)
	{
		if(M==-1 && N==-1)
			break;
		else
		{   javabean=0;
			double *p= new double[N];
			int *j= new int[N];
			int *f= new int[N];
			for(i=0; i<N; i++)
			{
				cin >> j[i] >> f[i];
				if(f[i]==0)
				{
					javabean+=j[i];
					p[i]=0;
				}
				else
					p[i]=(double)(j[i])/f[i];
			}
			
			for(i=0; i<N-1; i++)
			{
				for(k=i+1; k<N; k++)
					if(p[i]<p[k])
					{
						tmp=p[i]; p[i]=p[k]; p[k]=tmp;
						tmp=j[i]; j[i]=j[k]; j[k]=tmp;
						tmp=f[i]; f[i]=f[k]; f[k]=tmp;
					}
			}

			for(i=0; M>0 && i<N; i++)
			{
				if(M>=f[i])
				{
					javabean += j[i];
					M -=f[i];
				}
				else
				{
					javabean += M*p[i];
					M=0;
				}
			}
			cout << setiosflags(ios::fixed) << setprecision(3) << javabean << endl;
		}
	}
	return 0;
}