題目描述
一天,bessie在眺望美麗的威斯康星的群山的時候,她突然產生了疑問:哪座山是最寬的捏?她決定在地平線上,利用她的新發明的山峰高度測量儀依次做n (1 <= n <= 10,000)次高度測量h_i (1 <= h_i <= 1,000,000,000)。一座山定義為一段連續的高度序列,序列中的高度一開始單調上公升(或者不變),然後單調下降(或者不變)。舉例來說,2, 3, 3, 5, 4, 4, 1這一段高度序列就是一座山。如果在她的視線範圍內有一段只單調上公升或者只單調下降的序列,也算是一座山。山的寬度定義為在這個山上進行的測量的次數(也就是序列的長度)。請幫bessie找到最寬的山。
輸入第1行: 乙個單獨的整數: n
第2到第n+1行: 第i+1包含乙個單獨的整數: h_i
輸出乙個單獨的整數,表示最寬的山的寬度。
樣例輸入
7 3
2 3
5 4 1 6
樣例輸出
題解考試時被複雜的題目描述嚇到了!所以一直沒想怎麼做,而是不停想怎麼水分!
深搜?應該能拿十分吧!(當時已經很滿足了)
後來也想過dp,可是一直是想如何乙個陣列求出答案,所以當然沒想出來。
到考試最後二十分鐘,我上了個廁所回來終於想到了,可以乙個陣列求往左下降,乙個陣列求往右下降。ans=max(所有的f1+f2-1);
var
f1,f2,a:array[0..10001]of longint;
i,j,n,max:longint;
begin
readln(n);
for i:=1
to n do readln(a[i]);
for i:=1
to n do
if a[i]>=a[i-1] then f1[i]:=f1[i-1]+1
else f1[i]:=1;
for i:=n downto1do
if a[i]>=a[i+1] then f2[i]:=f2[i+1]+1
else f2[i]:=1;
max:=-maxlongint;
for i:=1
to n do
if f1[i]+f2[i]-1>max then max:=f1[i]+f2[i]-1;
writeln(max);
end.
打完後發現只有400多byte,感覺幾千b的深搜白打了……
算了,就當做練打字吧。
1281 山峰和旗子
由題意可得 k k 1 3 n 由公式能準確得出k的範圍。比較粗的估計就是 k floor sqrt n 2 也就是說,k的量級為sqrt n 量級 首先是輸入與預處理部分,複雜度o n 然後,對於每乙個範圍裡的k,都乙個個試過去,可以二分,所以複雜度為log k次,每次為k 所以該過程總複雜度為k...
單調棧模型 山峰
山峰 time limit 1000ms memory limit 65536kb problem description 金石山脈有n個山峰,一字排開,從西向東依次編號為1,2,3,n。編號為i的山峰高度為hi。每個山峰的高度兩兩不同 小木示從西向東依次爬過這n個山峰,到每乙個山峰的山頂的時候,他...
Noip模擬題 山峰
description在n m的棋盤上不重複的填1到n m 如果乙個數字比周圍的八個數字大,那麼他就是乙個山峰。現在告訴你所有山峰的位置,問你填數的方案數mod 12345678 input 輸入第一行兩個數字 n m意義如題目描述。接下來n 行,每行 m個字元,表示非山峰,x 表示山峰。1 n 4...