POJ1862-Stripies
Posted dk-f
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ1862-Stripies相关的知识,希望对你有一定的参考价值。
天降正义!!!
【题目描述】
两条变形虫可以进行合并,合并后新的个体质量为2*sqrt(m1*m2),m1、m2是原来未合并前两条变形虫的质量。已知3条或3条以上变形虫无法进行合并。
现在请你编程解决,当 N条变形虫进行两两合并,最后成为一条变形虫时,最小的质量为多少。
【输入】
第一行输入一个整数N(1<=N<=100),表示变形虫的数量。接下来N行每行包括一个1到10000之间的正整数,表示每条变形虫的重量。
【输出】
输出一个整数,表示最小可能生成的变形虫重量,精确到小数点后第三位。
【输入示例】
3
72
30
30
【输出示例】
120.000
好吧,令人失望的是,这道题是个贪心(不是深搜QWQ)。
我们稍微计算一下,可以发现m*n>=2*sqrt(m*n)。
所以,每次只要把最大的两个数进行计算就可以了。
但是,这道题最坑的地方反而在于输出格式。
首先,我用的是这种:
1 printf("%7.3f",bug[0]);
成功的输出格式错误。(fuck)
然后,我又改成这种:
1 cout <<setprecision(3) <<std::fixed<<x <<endl;
没加头文件,编译错误。(无fuck说)
最后,我改成这种:
1 printf("%.3lf ",bug[0]);
终于对了!!!(哭出声来)
好的不扯淡了,以下代码:
1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n; 7 double bug[113]; 8 void px() 9 { 10 for(int i=0;i<n;i++) 11 { 12 for(int j=i+1;j<n;j++) 13 { 14 if(bug[i]<bug[j]) 15 { 16 swap(bug[i],bug[j]); 17 } 18 } 19 } 20 } 21 int main() 22 { 23 cin>>n; 24 for(int i=0;i<n;i++) 25 { 26 cin>>bug[i]; 27 } 28 int k=n; 29 while(k>1) 30 { 31 px(); 32 double a=2*sqrt(bug[0]*bug[1]); 33 bug[1]=0; 34 bug[0]=a; 35 k--; 36 } 37 printf("%.3lf ",bug[0]); 38 }
总之,一道输出贼坑贼坑的贪心就这么出来了。老娘要给作者寄刀片!
在暴风雨中低着头,是为了不让雨水模糊风雨后眼中的彩虹。
以上是关于POJ1862-Stripies的主要内容,如果未能解决你的问题,请参考以下文章