c語言尺取演算法

2021-10-02 06:51:17 字數 849 閱讀 2753

尺取法:尺取法通常是對陣列儲存一對下標,即所選取的區間的左右端點,然後根據實際情況不斷地推進區間左右端點以得出答案。它就跟毛毛蟲一樣一步步往前取,但每次都會把兩端點變小,之所以需要掌握這個技巧,是因為尺取法比直接暴力列舉區間效率高很多,尤其是資料量大的

時候,所以尺取法是一種高效的列舉區間的方法,一般用於求取有一定限制的區間個數或最短的區間等等。當然任何技巧都存在其不足的地方,有些情況下尺取法不可行,無法得出正確答案。

當我們確定可以使用尺取法後,我們要正確的去分析。

我們不嘍嗖了,來舉個栗子:

給出了n個正整數(10輸入

第一行是測試用例的數量。對於每個測試用例,程式必須從第一行讀取數字n和s,用間隔隔開。序列號在測試用例的第二行給出,用間隔隔開。輸入將在檔案結束時結束。

輸出對於每種情況,程式必須在輸出檔案的單獨行上列印結果。如果沒有答案,則列印0。

10 15

7 1 2 6 8 9 4 5 10 3

實現待碼如下:

#include

#include

typedef long long ll;

int main()

;scanf("%lld%lld",&n,&s);

for(int i=0;in)

b=0;

printf("%lld\n",b);

return 0;}

ll min(ll x,ll y)

{return(xs或t>n時跳出迴圈。if(t>n&&sums是執行後面的語句,c就是用來標記前面的端點的,再一次次迴圈中把兩端點推進,直到sum

尺取 C語言

相比於普通的直接暴力列舉,尺取效率就高的多了。用乙個題目來比較一下 如果用通常的方法來解決這個問題就是這樣的 includelong long int a 2000010 int main if flag ans ans就是所要求的最大值,每次拿加好後的flag和ans比較,得到最大的那個 ans ...

尺取演算法 入門 模板 例題

尺取法原理及模板 一些入門例題 這裡根據題目poj 3061來具體實現。題意是說給你乙個有數字組成的序列,找出最短的子串 注意 子串是連續的,子串行可以不連續 使得這個子串的和大於等於s,求子串的長度。思路 使用尺取法來解決。include include include include inclu...

學習記錄 尺取

尺取法通常試用於選取區間有一定規律,或所選取的區間有一定的變化趨勢的情況。poj3061 題意 給定乙個序列,找出最短的子串行長度,使得其和大於或等於s 輸入 包含兩個數,乙個為序列長度n,乙個為s 樣例輸入 10 15 5 1 3 5 10 7 4 9 2 8 樣例輸出 2思路 當乙個區間的和大於...