尺取法還是蚯蚓法

2021-07-16 00:23:05 字數 1167 閱讀 2043

尺取法,顧名思義,像尺子一樣,一塊一塊的擷取。

是不是感覺從字面很難理解?

我們直接看例題:poj-3061

題目翻譯:

給定長度為n的數列整數a0,a1,a2,a3 ….. an-1以及整數s。求出綜合不小於s的連續子串行的長度的最小值。如果解不存在,則輸出0。

限制條件:

10< n<10^5, s<10^8, a<1000

這裡我們拿第一組測試資料舉例子,即

這幅圖便是尺取法怎麼「取」的過程了。

整個過程分為4步:1.初始化左右端點2.不斷擴大右端點,直到滿足條件3.如果第二步中無法滿足條件,則終止,否則更新結果4.將左端點擴大1,然後回到第二步

用尺取法來優化,使複雜度降為了o(n)。

最後,再給乙個尺取法的定義以便更好理解:返回的推進區間開頭和結尾,求滿足條件的最小區間的方法稱為尺取法。

其實,個人覺得這種方法稱之為蚯蚓法更好,像蚯蚓一般一點一點的先縮起來蓄勢再往前移動。

至於**,已經貼出來過,再貼一次吧

#include 

#include

#include

using

namespace

std;

const

int maxn=100010;

int num[maxn];

int n,s;

int main()

if(ans==n+1)

cout

<<0

cout

0;}

分析用sum累加sum陣列找到第乙個滿足sum>=s的sum[i]的 p 值,再依次縮小起始位址 head 到 p 的距離,獲得乙個 p-head 的值然後再將 p 值後移重複上述操作。

演算法 尺取法

我們先來介紹一下尺取法。尺取法,顧名思義,像尺子一樣,一塊一塊的擷取。題目翻譯 給定長度為n的數列整數a0,a1,a2,a3 an 1以及整數s。求出綜合不小於s的連續子串行的長度的最小值。如果解不存在,則輸出0。限制條件 100s 10 8 這裡我們拿第一組測試資料舉例子,即 n 10,s 15,...

尺取法練習

mr wolfram 的csdn 部落格 hopeforbetter的csdn部落格,尺取法顧名思義就像尺子一樣,當測量乙個物體時,你不一定從開始的位置測量,你可以從任意乙個位置st開始,當然前提是尺子夠長,然後你再讀出尾部en的數,尾部減去開始的位置en st,就是這個物體的長度。尺取法就是這個思...

尺取法基礎

p1638 逛畫展 題意 求最短區間包含所有畫家。思路 利用兩個變數來維護區間,如果區間不滿足條件r 滿足的話,l 直到區間最小。includeusing namespace std int a 1000005 b 1000005 int main b a l if b a l 0 k l else...