相比於普通的直接暴力列舉,尺取效率就高的多了。
用乙個題目來比較一下
如果用通常的方法來解決這個問題就是這樣的:
#includelong long int a[2000010];
int main()
if(flag>ans)//ans就是所要求的最大值,每次拿加好後的flag和ans比較,得到最大的那個
ans=flag;
i++;
}printf("%lld",ans);
}
不出所料,提交時間超限,所以現在就要換一種更好的思路,就是用尺取。
尺取呢,大致可以分為兩類:
1.固定區間長度的(比如本次的例子)
2.區間長度是不固定的;
這兩類都有以下兩個方式:
1:一端不動,另一端動;
2:兩端同時動(本次例子);
不多說,康康**:
#includelong long int a[2000010];
int main()
long long int i=2,ans=0,l=n;//因為後面出現a[i-1],要減去第乙個,所以i從2 開始
while(l--)
printf("%lld",ans);
}
以上就是我對尺取的理解。 c語言尺取演算法
尺取法 尺取法通常是對陣列儲存一對下標,即所選取的區間的左右端點,然後根據實際情況不斷地推進區間左右端點以得出答案。它就跟毛毛蟲一樣一步步往前取,但每次都會把兩端點變小,之所以需要掌握這個技巧,是因為尺取法比直接暴力列舉區間效率高很多,尤其是資料量大的 時候,所以尺取法是一種高效的列舉區間的方法,一...
學習記錄 尺取
尺取法通常試用於選取區間有一定規律,或所選取的區間有一定的變化趨勢的情況。poj3061 題意 給定乙個序列,找出最短的子串行長度,使得其和大於或等於s 輸入 包含兩個數,乙個為序列長度n,乙個為s 樣例輸入 10 15 5 1 3 5 10 7 4 9 2 8 樣例輸出 2思路 當乙個區間的和大於...
Bound Found(尺取 字首和)
題目大意 就是給n個有正有負的整數,然後給k個t,在n數列中找到連續的乙個序列使得這個序列的和的絕對值最接近t,然後輸出這個序列的和的絕對值和它的區間左右端點。思路 這是個尺取的問題,首先這是我第一道尺取題,不知道為什麼第一道就不容易找單調出序列,不知道掛題的學長怎麼想的,雖然當時講了一小下這種問題...