码迷,mamicode.com
首页 > 其他好文 > 详细

poj1862---变形虫(贪心)

时间:2015-05-25 14:26:49      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

题意:两条虫之间碰在一起,质量变为2*sqrt(m1*m2)

求怎么结合,能使最后的一只虫质量最小

分析:如果让按从大到小的顺序依次结合,可以使大的数被开方的次数最多,得到的结果更小

4 3 2 1 

3,4被开3次,2被开2次,1被开1次,只要按照公式来,一定有数分别被开3,3,2,1次,不过按照大的开更多次,能使得结果更小,不过我没算过...

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int cmp(const void *a,const void *b)
{
    return (*(int *)b-*(int *)a);
}
int main()
{
    int a[100],n,i;
    float ans;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    if(n==1)
    {
        printf("%.3f\n",a[0]*1.0);
        return 0;
    }
    qsort(a,n,sizeof(a[0]),cmp);
    ans=2*sqrt(a[0]*a[1]*1.0);
    for(i=2;i<n;i++)
    {
        ans=2*sqrt(ans*a[i]*1.0);
    }
    printf("%.3f\n",ans);
    return 0;
}

WA:没考虑只一个数的情况

技巧:在整数运算后*1.0,结果变成浮点数

for(i=2;i<n;i++)
    {
        ans=2*sqrt(ans*a[i]*1.0);
    }

 

poj1862---变形虫(贪心)

标签:

原文地址:http://www.cnblogs.com/gabygoole/p/4527690.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!