POJ - 1862:石子任意合并(贪心)

题目链接
小明在学校里发现了几颗魔法石子。
为什么这么说呢?因为他发现只要把两颗石子放在一起,它们就会自己合并成一颗。
而且经过多次试验之后,小明发现石子的合并过程其实是有规律的(智商+++)。如果质量分别为a,b的石子放在一起,合并出的新石子的质量即为2sqrt(ab)

a few minutes later,小明终于把它们合并成了一块石头,然而

真的很重啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!

就这样,学校里多了一块大石头。
全剧终

小明觉得可能是合成顺序的问题,所以他现在想知道最终的这块大石头的质量的最小值是多少(每次合成的时候不一定要取相邻的石子)

Input
第一行输入 N (1 <= N <= 100) :石子的数量. 接下来的 N 行是每颗石子的质量(1<=m<=10000)
Output
输出最小质量。保留至小数点后三位
Sample Input
3
72
30
50
Sample Output
120.000
这道题区别于别的石子合并,并非是每次将两个最小的相加,这道题而是相加两个最大的并通过计算得到新的石子质量
此处输出小数点后三位并不需要四舍五入

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    double sz[105];
    int i,j,n;
    double sum;
    while(cin >> n)
    {
        for(i = 0;i < n;i++)
            cin >> sz[i];
        sort(sz, sz+n);
        for(i = n-1;i >= 1;i--)
            sz[i-1] = 2 * sqrt(sz[i-1]*sz[i]);
        printf("%.3lf\n",sz[0]);
    }
    return 0;
}

你可能感兴趣的:(贪心)