尺取法

尺取法

尺取法核心思路

尺取法其實也是一種模擬陵吸,是解決尋找區(qū)間和問題的一種方法蜒蕾。

假如有這么一個問題:給你一些數(shù)薇芝,請在這些數(shù)中找到一個區(qū)間茫死,使得區(qū)間里每一個元素的和大于或等于給定的某個值路翻。

不會尺取法的話狈癞,肯定就會開雙重循環(huán),枚舉區(qū)間起點和終點茂契,然后每一次都求一次和蝶桶,再和給定的數(shù)作比較。

尺取法與它的思路類似掉冶,都是尋找一個區(qū)間的起點和終點真竖。做法是:

用兩個指針,最初都指向厌小,這一組數(shù)中的第一個恢共,然后如果這個區(qū)間的元素之和小于給定的數(shù),就把右指針向右移璧亚,直到區(qū)間和大于等于給定的值為止讨韭。之后把左指針向右移,直到區(qū)間和等于給定的值為止癣蟋,保存方案透硝,繼續(xù)操作。

假如左指針指向這些數(shù)的第一個疯搅,并且右指針指向這組數(shù)的最后一個濒生,這種情況下的子區(qū)間元素之和仍然小于給定的數(shù)的話,那么就輸出-1秉撇,表示不可能甜攀。

那么怎么求區(qū)間和呢?

當然琐馆,for一遍是可以的规阀,但是太浪費時間了。我們可以引入一個累加器瘦麸,初始值等于這組數(shù)中的第一個元素(因為最開始左指針和右指針都指向它)谁撼,當右指針向右移時,累加器每次就加上右指針指向的元素的值。當左指針向右移時厉碟,累加器每次就減去左指針指向的值喊巍。

怎么實現(xiàn)呢?

實現(xiàn)

這里有道模板題

poj3061

下面附上代碼(不是我寫的)

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int a[100000+33];
int ans,S,N;

void solve()
{
    ans=100000+44; 
    int L=1,R=1,sum=0,lsub=0;
    while(R<=N)
    {
        while(sum<S&&R<=N)//R總指向當前滿足要求區(qū)間的下一個 注意此處R可能>N 
        {
            sum+=a[R];//累加器加上右指針指向的元素
            ++R;//右指針向右移
            ++lsub;
        }
        while(sum>=S)//L總指向當前區(qū)間的最左邊  左閉右開 
        {
            sum-=a[L];//累加器減去左指針指向的元素的值
            ++L;//左指針右移
            --lsub;
        }
        ans=min(ans,lsub+1);
    }
}

int main()
{
    int T,i,sum;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&N,&S);
        sum=0; bool flag=false;
        for(i=1;i<=N;++i) 
        {
            scanf("%d",&a[i]);
            sum+=a[i];
            if(sum>=S&&!flag) flag=true;    
        }
        if(!flag)
        {
            printf("0\n"); continue;
        }
        solve();
        printf("%d\n",ans);
    }
    return 0;
}

尺取法嘛箍鼓。崭参。應(yīng)該很好懂,就是一種模擬的策略款咖。

在各大競賽都會用到(還有90天了)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末何暮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铐殃,更是在濱河造成了極大的恐慌海洼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件富腊,死亡現(xiàn)場離奇詭異坏逢,居然都是意外死亡,警方通過查閱死者的電腦和手機赘被,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門是整,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帘腹,你說我怎么就攤上這事贰盗。” “怎么了阳欲?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵舵盈,是天一觀的道長。 經(jīng)常有香客問我球化,道長秽晚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任筒愚,我火速辦了婚禮赴蝇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巢掺。我一直安慰自己句伶,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布陆淀。 她就那樣靜靜地躺著考余,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轧苫。 梳的紋絲不亂的頭發(fā)上楚堤,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音,去河邊找鬼身冬。 笑死衅胀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的酥筝。 我是一名探鬼主播滚躯,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼樱哼!你這毒婦竟也來了哀九?” 一聲冷哼從身側(cè)響起剿配,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤搅幅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呼胚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茄唐,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年蝇更,在試婚紗的時候發(fā)現(xiàn)自己被綠了沪编。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡年扩,死狀恐怖蚁廓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厨幻,我是刑警寧澤相嵌,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站况脆,受9級特大地震影響饭宾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜格了,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一看铆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盛末,春花似錦弹惦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至算墨,卻和暖如春宵荒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工报咳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侠讯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓暑刃,卻偏偏與公主長得像厢漩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岩臣,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容