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

来源:互联网 发布:知乎 阿里 投资 编辑:程序博客网 时间:2024/05/22 00:20

题意:

M  N

J[i]  F[i]

fatmouse有M克猫粮(类似吧),现在有个房间,F[i]  pounds 猫粮 可以换 J[i] pounds javabeans.

(hdoj的discuss里有句话很搞:“在我查过大量的资料后,终于明白了,JavaBean是一种爪哇产的咖啡豆,肥鼠怎么可能喜欢吃这种东西...........”)


分析:

果断贪心,按照j/f 排序。WA了几次,还是因为思考问题不严密啊,真的要有意识地加强。严谨!!!.

1 0 和

0 1

1 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;}

	
				
		
原创粉丝点击