您的位置:首页 > 其它

zoj 2109 || hdoj1009 FatMouse' Trade(贪心)

2011-11-28 07:53 519 查看
题意:M NJ[i] F[i]fatmouse有M克猫粮(类似吧),现在有个房间,F[i] pounds 猫粮 可以换 J[i] pounds javabeans.(hdoj的discuss里有句话很搞:“在我查过大量的资料后,终于明白了,JavaBean是一种爪哇产的咖啡豆,肥鼠怎么可能喜欢吃这种东西...........”)分析:果断贪心,按照j/f 排序。WA了几次,还是因为思考问题不严密啊,真的要有意识地加强。严谨!!!.1 0 和0 11 0这两组数据过不了,然后就断网了。继续把情况考虑了下.早上很早就起来交上去试试,结果行了。哎,郁闷。学姐也发给我一份她改过的,没考虑特殊情况,只不过在判断条件上我用
if(M>a[i].f) 
然后她是加了个=。这样就可以了。>_<
偶的丑代码:
#include <iostream>
#include <cstdio>
using namespace std;
typedef struct p{
    int j,f;
    double d;
}point;
int main()
{
    int M,N;
    int i,j;
    double ff,res;
    point a[1005],temp;
    while(~scanf("%d%d",&M,&N))
    {
        if(M==-1&&N==-1) break;
        res=0;
        if(N==0) printf("%.3f\n",res);
        for(i=0;i<N;i++)
        {
            cin>>a[i].j>>a[i].f;
            a[i].d=(double)a[i].j/a[i].f;
        }
        for(i=0;i<N;i++)
        {
            for(j=i;j<N;j++)
            {
                if(a[i].d<a[j].d)
                {
                    temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
            }
        }
        for(i=0;i<N;i++)
        {
            if(M>a[i].f) 
            {
                res+=a[i].j;
                M-=a[i].f;
                if((i>=N-1&&M>0)||M==0) {printf("%.3f\n",res);break;}
            }
            else if(M<=a[i].f)
            {
                ff=(double)a[i].j/a[i].f;
                if(a[i].f==0) res+=a[i].j;
                else 
                res+=ff*M;
                printf("%.3f\n",res);
                break;
            }
        }
    }
        return 0;
}
学姐的:
#include <iostream>#include <cstdio>using namespace std;typedef struct p{	int j,f;	double d;}point;int main(){	int M,N;	int i,j;	double res;	point a[1005],temp;	while(~scanf("%d%d",&M,&N))	{		if(M==-1&&N==-1) break;		res=0;		for(i=0;i<N;i++)		{			cin>>a[i].j>>a[i].f;			a[i].d=(double)a[i].j/a[i].f;		}		for(i=0;i<N;i++)		{			for(j=i;j<N;j++)			{				if(a[i].d<a[j].d)				{					temp=a[i];					a[i]=a[j];					a[j]=temp;				}			}		}		for(i=0;i<N;i++)		{			if(M>=a[i].f)//条件注意			{				res+=a[i].j;				M-=a[i].f;				if(M==0)					break;			}			else if(M<a[i].f)			{				res+=a[i].d*M;				break;			}		}		printf("%.3f\n",res);	}		return 0;}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: