ZOJ2091(贪心)
解題思路:剛讀完這道題后,不懂什么意思,感覺挺奇怪的。看了幾遍題后,還是無從下手。通過動筆畫畫與測試數據結果對住了,覺得應該是這個意思,也確實是的。題目意思的正確理解應當是,從任意位置開始一直取到末尾,然后求其平均值,把這n個平均值中取最大的一個輸出。也是按照貪心原則求解問題。
????? 如Sample:
????? 10
????? 2 10 4 6 5 10 10 2 3 2
????? 取
???????? <1> (2 + 10 + 4 + 6 + 5 + 10 + 10 + 2 + 3 + 2 ) / 10
???????? <2>(10 + 4 + 6 + 5 + 10 + 10 + 2 + 3 + 2) / 9
???????? <3>( 4 + 6 + 5 + 10 + 10 + 2 + 3 + 2) / 8
???????? <4>( 6 + 5 + 10 + 10 + 2 + 3 + 2) / 7
???????? <5>(5 + 10 + 10 + 2 + 3 + 2) / 6
???????? <6>(10 + 10 + 2 + 3 + 2) / 5
???????? <7>(10 + 2 + 3 + 2) / 4
???????? <8>(2 + 3 + 2) / 3
???????? <9>( 3 + 2) / 2
???????? <10>2 / 1
????? 在這10個數里取一個最大值輸出即可。
? 注意:這題竟然沒有給數據量大小,確實挺難為人的。開始我設了1005的上限,檢查無誤提交竟然是Segmentation Fault,讓我看了半天不知道是什么錯誤,以前從沒見過。我猜是不是數據量設的太小了,就改為10005的上限,結果終于AC了。不過最關鍵的還是題意要搞懂!
View Code ?1?#include<iostream>?2?#include<cstdio>
?3?using?namespace?std;
?4?
?5?#define?Max?10005
?6?double?a[Max],b[Max];
?7?
?8?int?main()
?9?{
10?????int?i,n;
11?????while(cin>>n)
12?????{
13?????????for(i=0;i<n;i++)
14?????????????cin>>a[i];
15?????????double?sum=0.0;
16?????????for(i=n-1;i>=0;i--)
17?????????{
18?????????????sum+=a[i];
19?????????????b[i]=sum/(n-i);
20?????????}
21?????????double?max=0;
22?????????for(i=0;i<n;i++)
23?????????????if(max<b[i])?max=b[i];
24?????????printf("%.6f\n",max);
25?????}
26?????return?0;
27?}
?
轉載于:https://www.cnblogs.com/yueshuqiao/archive/2012/02/03/2337225.html
總結
以上是生活随笔為你收集整理的ZOJ2091(贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++头文件包含技巧
- 下一篇: 为什么要用内部类:控制框架【转】