现在的位置: 首页 > 综合 > 正文

hdu 1009

2018年01月12日 ⁄ 综合 ⁄ 共 1085字 ⁄ 字号 评论关闭

背景:贪心吧。看到会长说说说他也退役了,感伤,这几天感冒学dp无力,就来水水贪心。

学习:

1.逻辑错误,始终还是会有,对数组的处理能力需要加强,别人都是用结构体,而我是用了一个三列的数表来处理问题,看来对结构体还从未用过。

2.期间对性价比的排序用了选择排序的思想,看来算法充分理解后会自己变了用才是境界,比如快速排序中用一个key来记录数据而不是多开一个数组是很好的。

#include<stdio.h>
double str[10001][3];
int main(void)
{
	double n;
	int m;//max±íʾ»ñµÃµÄJavabeanµÄÖµ¡£ 
	while(scanf("%lf %d",&n,&m)!=EOF)
	{ 
	    double max=0;
		int line=m;//line±íʾÓÐЧÐÐÊý£¬f¡¾j¡¿Îª0µÄÐж¼ÎÞЧ£¬²»ÒªÇ®Ö±½ÓÂò¡£ 
		if(n==-1&&m==-1) break;
		for(int i=0;i<m;++i)
		{
			scanf("%lf",&str[i][0]);
			scanf("%lf",&str[i][1]);
			if(str[i][1]==0)
			{
				max+=str[i][0];
				--i;
				--line;
				--m; 
			} 
			else str[i][2]=str[i][0]/str[i][1];//Êý×éµÄµÚÒ»Áбíʾ·¿¼äµÄJavabeansµÄÊýÁ¿£¬µÚ¶þÁбíʾ
                                               //ʾÐèÒªµÄèʳ£¬µÚÈýÁбíʾÐÔ¼Û±È 			 
		} 
		for(int i=line;i>0;--i)
		{
			int key=0;
			double aa=0;//keyÓÃÀ´±£´æ×î´óÐԼ۱ȵÄÐÐϱ꣬aa±£´æ×î´óÐÔ¼Û±È 
			for(int j=i;j>0;--j)
			{
				if(str[j-1][2]>aa) 
				{
				key=j-1;
				aa=str[j-1][2];
		     	}
			}//ÀàËÆÓÚÑ¡ÔñÅÅÐò£¬ÕÒ³öÿ´Î×î´óÐÔ¼Û±È  
			if(str[key][1]<n)
			{
				max+=str[key][0];
				n-=str[key][1];
			} 
			else
			{
				max+=n*str[key][2];
				break;
			}
			str[key][0]=str[i-1][0];
			str[key][1]=str[i-1][1];
			str[key][2]=str[i-1][2];//×îºóÒ»×éÊý¾ÝתÒƵ½key×éÊý¾Ý£¬ÒòΪÏ´β»»á¶Áµ½×îºóÒ»×éÊý¾Ý 
		} 
		printf("%.3lf\n",max);
	}
	return 0;
}

注解乱码!

抱歉!评论已关闭.