• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            相關(guān)鏈接0
            相關(guān)鏈接1

            NOI2012結(jié)束了,對本沙茶來說就是雞肋之戰(zhàn),因?yàn)椴还艿枚嗌俜侄寄居杏茫荒艿玫较駨U紙一樣的成績證明(其實(shí)就連這個,本沙茶都木有拿到囧)
            而AHOI2012選出來的安徽省隊(duì),成績史上最差,正式選手首次Au、Ag都木有,在忽略團(tuán)體對抗賽的情況下,團(tuán)體分全場Rank20,東部倒數(shù)第二……
            唯一值得慶幸的是團(tuán)體對抗賽得了Rank4,而且是在決賽時(shí)RP耗盡導(dǎo)致的……

            真真切切希望:
            (1)2012~2013賽季中,自己的水平能快速提高,早日脫菜;
            (2)NOIP2012 AH 1=分?jǐn)?shù)線不低于全國劃線;
            (這個夢想已經(jīng)破滅了……唯一能希望的就是CCF NOI2013省隊(duì)名額改革,要是真改不了就用盡全力擠進(jìn)前4吧囧……畢竟2011年本沙茶都干出過這個,2013年應(yīng)該也可以囧)
            (3)AHOI2013不要再出像今年這樣的題了,至少要保證每題都有正解、數(shù)據(jù)范圍不騙人;
            (4)NOI2013上,AH今年的悲劇不要重演,團(tuán)體分至少進(jìn)Rank12……

            其它就木有神馬可說的了囧。

            (本沙茶曾經(jīng)在網(wǎng)絡(luò)上消失了很長一段時(shí)間,現(xiàn)在回來了,原來那個帖子刪除)

            posted @ 2012-08-05 00:32 Mato_No1 閱讀(974) | 評論 (7)編輯 收藏

                 摘要: 【異或(XOR)運(yùn)算由于與“奇偶性”密切相關(guān),經(jīng)常出現(xiàn)在有關(guān)奇偶性和二進(jìn)制的題目中】很多異或問題都要涉及到解異或方程組,因此首先要搞懂異或方程組的解法。(1)異或方程組的格式(設(shè)有n個未知數(shù),m個方程):a11*x1 XOR a12*x2 XOR ... XOR a1n*xn = b1a21*x1 XOR a22*x2 XOR ... XOR a2n*xn = b2R...  閱讀全文

            posted @ 2012-05-20 10:17 Mato_No1 閱讀(10286) | 評論 (4)編輯 收藏

            【dispatching】
            (這題國內(nèi)數(shù)據(jù)極弱,暴力能80,下面的解法1,平衡樹即使用Splay Tree實(shí)現(xiàn)都能AC)
            枚舉管理者所在的結(jié)點(diǎn),然后在這個結(jié)點(diǎn)及其所有后代中找到權(quán)值前K小的,使得它們的權(quán)值和不超過限制,要求求出K的最大值。
            解法1:將每個結(jié)點(diǎn)及其所有后代的權(quán)值存在一個平衡樹里,然后,對于每個結(jié)點(diǎn),若不是葉結(jié)點(diǎn),就將其所有的子樹中,找到最大的那棵子樹,它所表示的平衡樹不動,將其它的子樹表示的平衡樹上的所有結(jié)點(diǎn)強(qiáng)行拆開,并插入到這個子樹表示的平衡樹中(這叫啟發(fā)式合并),別忘了將該結(jié)點(diǎn)本身也合并到這棵平衡樹里。合并好了以后,通過每個點(diǎn)記錄的sum(下面說明),用類似于求結(jié)點(diǎn)排名的方法,就可以求出K的最大值了。
            容易證明,這樣合并的話,在整個過程中插入的次數(shù)是O(NlogN)的,加上平衡樹插入本身的O(logN),總的時(shí)間復(fù)雜度為O(Nlog2N)。
            具體實(shí)現(xiàn)起來有一些技巧:
            (1)可以發(fā)現(xiàn),在合并過程中,各個點(diǎn)本身并沒有變,而只是它們之間的關(guān)系發(fā)生了變化(從不在同一棵樹上變成在同一棵樹上了),因此為了節(jié)省空間,可以預(yù)先將所有的結(jié)點(diǎn)建好,每個結(jié)點(diǎn)除了自身權(quán)值以外還記錄mul(初始為1)、sz(初始為1)、sz0(初始為1)、sum(初始等于權(quán)值)等信息,其中mul為重復(fù)次數(shù),sz為考慮mul情況下的樹的大小,sz0為不考慮mul的情況下的樹的大小(也就是實(shí)際結(jié)點(diǎn)個數(shù)),sum表示樹上所有結(jié)點(diǎn)的總權(quán)值(這個當(dāng)然要考慮mul了)。之所以維護(hù)sz0,是因?yàn)槊看慰梢酝ㄟ^找到sz0最大的子樹不動來加速。插入的操作是void ins(int r, int No),表示將結(jié)點(diǎn)No(是結(jié)點(diǎn)不是值)插入到以r為根的子樹里,注意這個結(jié)點(diǎn)No的mul可能大于1,因此在插入后維護(hù)的時(shí)候需要注意;
            (2)由于在過程中會同時(shí)有多棵平衡樹存在,因此每個點(diǎn)還需要記錄一個額外的域rf,rf=-1表示該結(jié)點(diǎn)不是任何一棵平衡樹的根結(jié)點(diǎn),rf>=0表示該結(jié)點(diǎn)是原樹中編號為rf的結(jié)點(diǎn)表示的平衡樹的根結(jié)點(diǎn),同時(shí)記錄root[i]表示結(jié)點(diǎn)i表示的平衡樹的根結(jié)點(diǎn)編號,這樣就可以很方便地實(shí)現(xiàn)樹內(nèi)外的對接(注意這兩個值的維護(hù),尤其是將結(jié)點(diǎn)i本身合并到平衡樹里的時(shí)候,別忘了把root[i]改掉)。
            解法2(正解):合并的時(shí)候使用可并堆(用左偏樹或斜堆實(shí)現(xiàn)),時(shí)間復(fù)雜度O(NlogN)。

            【guard】
            (這題其實(shí)很容易想到網(wǎng)絡(luò)流的話說……不過仔細(xì)研究一下就可以發(fā)現(xiàn),由于報(bào)告上來的只是某一個區(qū)間內(nèi)有木有人,而不是有幾個人,因此無法用網(wǎng)絡(luò)流的流量平衡來表示)
            首先,某些區(qū)間報(bào)告木有人,這些區(qū)間內(nèi)的點(diǎn)肯定不符合要求了,可以將它們刪掉,然后對于剩下的(可能是若干段)區(qū)間,合并起來,對結(jié)點(diǎn)從左到右重新編號(這一步可以用線段樹,也可以排序后直接掃描,見這里,本沙茶比賽時(shí)為了省事直接上線段樹了),然后就只需要考慮那些報(bào)告有人的區(qū)間了囧……當(dāng)然,這些區(qū)間的端點(diǎn)也是要對應(yīng)地重新編號的,編號完了以后,將所有包含別的區(qū)間的區(qū)間刪去(因?yàn)樗鼈兊拇嬖谀居幸饬x),方法:對于所有重編號后的區(qū)間,將其按照先左端點(diǎn)遞增,后右端點(diǎn)遞減排序,然后設(shè)置一個棧,保證棧中的區(qū)間左右端點(diǎn)均嚴(yán)格遞增,按照排序之后的順序掃描每個區(qū)間,每次一個新區(qū)間入棧時(shí),棧頂所有右端點(diǎn)大于等于這個新區(qū)間右端點(diǎn)的區(qū)間出棧,再將新區(qū)間入棧,這樣最后棧中的區(qū)間就是保留下來的區(qū)間了囧……而且已經(jīng)排序……
            然后,如果問題是求至少要多少個人的話,就是一個經(jīng)典的貪心模型了,掃描排序后的區(qū)間,如果一個區(qū)間內(nèi)還木有任何人,就在它的右端點(diǎn)處放一個人。顯然,除了這些放了人的區(qū)間的右端點(diǎn)之外,其余的點(diǎn)肯定都不是必須放人的(因?yàn)楝F(xiàn)在已經(jīng)有一個方案使它們不放人了)。現(xiàn)在的問題是,這些右端點(diǎn)處是否必須放人。
            設(shè)F[i]為第i個區(qū)間及其之后的區(qū)間當(dāng)中,若要每個區(qū)間內(nèi)都有人,至少要幾個人。若第i個區(qū)間的右端點(diǎn)不小于最后一個區(qū)間的左端點(diǎn),則F[i]=1(在第i個區(qū)間右端點(diǎn)放一個人即可),否則,找到最小的j,使得第i個區(qū)間的右端點(diǎn)小于第j個區(qū)間的左端點(diǎn)(這個顯然可以二分查找得到),則F[i]=F[j]+1。這樣從后到前推一遍即可。然后,再從前到后,按照上面的貪心算法的流程掃一遍,如果遇到第i個區(qū)間的右端點(diǎn)需要放人:若第i個區(qū)間的長度為1,顯然這里必須放人,否則嘗試在第i個區(qū)間的倒數(shù)第2個位置(即右端點(diǎn)之前的那個位置)放人,而右端點(diǎn)不放人(可以證明,不會后來又把這個右端點(diǎn)這里放上人的),類似用二分查找的方式找到這個j,然后看一下(_F + F[j] + 1)(_F為第i個區(qū)間前面放人個數(shù))是否大于K,若大于K,則第i個區(qū)間的右端點(diǎn)必須放人,否則不必須放人。
            此外還有兩種特殊情況,一是M=0的時(shí)候在去包含的時(shí)候要特判一下(其實(shí)這時(shí)可以直接特判,若N=K,則所有的地方都必須放人,否則就是-1);二是,如果去掉那些肯定木有人的點(diǎn)后,剩下的點(diǎn)的個數(shù)剛好等于K(不可能小于K的,因?yàn)榭隙ㄓ薪猓瑒t不用貪心了,剩下所有的地方肯定都必須放人。
            總時(shí)間復(fù)雜度O(NlogN + MlogM);
            這里千萬要注意的一點(diǎn)是,應(yīng)該先將所有區(qū)間重編號再去包含,而不應(yīng)該先去包含再重編號!!!因?yàn)榭赡苡袃蓚€區(qū)間本來是不包含的,但重編號以后,包含了。(本沙茶比賽的時(shí)候就是這里木有注意到,跪了3個點(diǎn),杯具了)

            【kunai】
            40分的暴力做法:枚舉兩個動點(diǎn),求出它們是否會相撞以及相撞的時(shí)間,然后將所有相撞事件按照時(shí)間排序,掃描排序后的每個事件,如果相撞的兩個動點(diǎn)都還在,就將它們消去,然后可以求出每個動點(diǎn)移動的距離,求一下并集(線段樹)即可;(本沙茶當(dāng)時(shí)主要是實(shí)在木有時(shí)間寫這題了,因此連暴力都木有寫)
            AC做法:很明顯,一個動點(diǎn)一旦被消去,就不會再次出現(xiàn)了,因此對于每一個點(diǎn),只需要找到最先和這個點(diǎn)相撞的點(diǎn)即可。顯然能夠相撞的兩個點(diǎn)必然位于同一行/列/對角線上且方向滿足一定限制(其實(shí)一共只有6種情況:同一行一種,同一列一種,同一左上右下對角線兩種,同一右上左下對角線兩種)。因此,枚舉這6種情況,直接用掃描法得到最先與它相撞的動點(diǎn),取相撞時(shí)間最小的那個即可,如果都找不到,這個點(diǎn)就是永存的。這樣相撞事件的總數(shù)就減少到了O(N)級別,總時(shí)間復(fù)雜度就是O(NlogN)。
            注意:有可能在同一時(shí)間有多個動點(diǎn)在同一位置相撞,因此,對于同時(shí)發(fā)生的相撞事件,應(yīng)該將它們一起處理,涉及到的點(diǎn)一起消去。

            posted @ 2012-05-12 21:41 Mato_No1 閱讀(2922) | 評論 (6)編輯 收藏

            【網(wǎng)絡(luò)流問題可以說是OI中最靈活的問題之一了,建模方法很多,但還是有一定規(guī)律的囧……當(dāng)然,由于本沙茶做題暫時(shí)還比較少,可能這里總結(jié)的東東只是網(wǎng)絡(luò)流建模技巧的一小部分,希望各位題海神犇進(jìn)行補(bǔ)充】

            網(wǎng)絡(luò)流建模主要分為兩類:直接用最大流建模、用最大流—最小割定理轉(zhuǎn)化為最小割來建模。這里主要總結(jié)的是前一種。

            (1)增廣路思想:
            應(yīng)用范圍較小,但是確實(shí)有一些模型用增廣路思想很容易解釋,用流量平衡思想?yún)s很難解釋(比如下面舉的例子)。
            增廣路思想可以概括為:原題的方案的得出可以很明顯地分為一些階段,每一階段都會對一些變量(這些變量可能是實(shí)的也可能是虛設(shè)的)產(chǎn)生同樣的效果值累加,而這些變量恰好有各自的限制,且互不關(guān)聯(lián)。這剛好相當(dāng)于網(wǎng)絡(luò)中的一條從源點(diǎn)到匯點(diǎn)的一條增廣路,對路上所有邊的流量都會增加,且流量有各自限制(容量),且互不關(guān)聯(lián)。并且,該模型滿足下面(3)中的兩條原則(可行性原則和最優(yōu)性原則)。在比較多的時(shí)候,用增廣路思想能夠解釋的模型往往是一個很明顯的“物質(zhì)路徑”模型,某一種物質(zhì)(可以是實(shí)的也可以是虛的)從源點(diǎn)往匯點(diǎn)“走”,邊上的流量代表物質(zhì)經(jīng)過的量。
            例1:[NOIP2011]觀光公交
            首先,由于來出發(fā)地的時(shí)間已知且一定,所以“旅行時(shí)間總和最小”其實(shí)就是所有人下車的時(shí)間總和盡可能小,因此,先求出在不用任何加速器(初始)情況下,到達(dá)每一站的時(shí)間,設(shè)為S[i],又設(shè)M[i]為在第i站上車的來的最晚的人來的時(shí)間,則很顯然可以得到初始的遞推式:S[i]=max{S[i-1], M[i-1]}+D[i-1](初始的D值),邊界S[0]=0。
            下面來看一下D[i]的減少是如何影響S值的。看下面這個例子:
            N=5
            i                  :  0   1   2   3   4
            D[i](初始):  3   4   3   2   \
            M[i]              : 1   2   6  14   \
            S[i](初始):  0  4   8  11  16
            現(xiàn)在將D[0]的值減小1之后:
            i    :  0   1   2   3   4
            D[i]:  2   4   3   2   \
            M[i]: 1   2   6  14   \
            S[i]:  0  3   7  10  16
            可以發(fā)現(xiàn),D[0]值減小1之后,S[1..3]的值都減小了1,而S[4]的值不變。這是因?yàn)樵贒[0]減小1之前,對于1<=i<3均有S[i]>M[i],D[0]若減小1,顯然S[1]會減小1,而由于S[1]>M[1],S[1]=max{S[1], M[1]},所以S[1]的值減小1會使得max{S[1], M[1]}減小1,從而S[2]的值減小1,然后由于初始的S[2]>M[2],同樣會使得S[3]減小1,而初始的S[3]<=M[3],故S[3]減小1不會使得max{S[3], M[3]}發(fā)生變化,所以S[4]的值不會受到影響。
            所以,可以得到:D[i]減小1,會使得S[i+1..j+1]均減小1,其中j是使任意i+1<=k<=j0均滿足S[k](減小前)>M[k]的最大的j0值。
            從這個當(dāng)中可以發(fā)現(xiàn),對于原題的每一個可行方案,必然都是分為若干個階段,其中每一階段是將某個D[i]值減小1(當(dāng)然,要滿足D[i]在減小前>0),每一階段進(jìn)行后都會將從S[i+1]開始的連續(xù)的一段S值都減小1,恰好可以抽象成一條連續(xù)的路徑,又因?yàn)楫?dāng)S[i]減小到<=M[i]的時(shí)候就必須停止了(準(zhǔn)確來說是不能再往后延伸了),所以每個S[i]的能夠繼續(xù)延伸的減小的量都是有限的,為初始的S[i]-M[i](如果這個值<0,則取0),剛好是一個上限。這很明顯是增廣路思想。
            所以,經(jīng)過整理,可以建立一個網(wǎng)絡(luò)流模型:
            <1>設(shè)立兩個源點(diǎn)s和s'(其中s是真正的源點(diǎn))及匯點(diǎn)t,連邊<s, s'>,容量為K,費(fèi)用為0,表示最多只能有K個階段;
            <2>將每一站i拆成兩個點(diǎn)i'和i'',連邊<i', i''>,容量為max(S[i]-M[i], 0),費(fèi)用為0,表示該點(diǎn)最多只能接受max(S[i]-M[i], 0)次加速器作用;
            <3>對于所有的i滿足1<=i<N,連邊<(i-1)'', i'>,容量為INF,費(fèi)用為第i站下車的人數(shù)(這是因?yàn)榧词筍[i]<=M[i],加速器對于本站仍然有效,只是不能繼續(xù)延伸,所以表示加速器起的效果的邊應(yīng)該在本站的限制之前);
            <4>對于所有的i滿足0<=i<N-1,連邊<s', i''>,容量為初始D[i],費(fèi)用為0,表示使用加速器的地方,從下一站開始對S[i]起效果;
            <5>對于所有的i滿足1<=i<N,連邊<i', t>,容量為INF,費(fèi)用為0,表示加速器作用的結(jié)束。
            (其實(shí),0'和(N-1)''這兩個點(diǎn)是木有任何意義的,可以從圖中刪掉)
            這樣,每一階段加速器的作用都可以表示為一條從s到t的增廣路,該網(wǎng)絡(luò)流模型中的各種限制也反應(yīng)了題目中的限制。對該網(wǎng)絡(luò)求最大費(fèi)用最大流,得到的總的最大費(fèi)用從初始的總旅行時(shí)間中減去(注意總旅行時(shí)間是long long的),即為答案。可以證明,這個模型符合“兩條原則”,所以是正確的。

            (2)流量平衡思想:
            這個思想的應(yīng)用非常廣,可以解釋絕大多數(shù)網(wǎng)絡(luò)流模型。
            所謂流量平衡,就是指在一個可行流里,除了源點(diǎn)和匯點(diǎn)外,其余每個點(diǎn)的入邊流量總和都等于出邊流量總和。可以證明,一個流是可行流當(dāng)且僅當(dāng)其:(1)每條邊的流量都不超過容量限制;(2)符合流量平衡。
            流量平衡思想的主要用處是:可以把圖中的每條邊的流量(當(dāng)然必須是非負(fù)的)都想像為一個變量的值,對于每個點(diǎn),滿足流量平衡,也就是一些變量的和值滿足某種等量關(guān)系,如果這些等量關(guān)系剛好能夠反映題目中的所有信息,邊的容量限制也反映題目中的條件,且這個模型符合“兩條原則”,則該模型就是正確的了。在建模的時(shí)候,應(yīng)先單獨(dú)考慮各個點(diǎn),找到它們的所有入邊和出邊代表的變量是什么,然后再將這些邊合并,構(gòu)成圖。
            在用流量平衡建模時(shí)有一些技巧:
            <1>要注意每條邊都同時(shí)作為一個點(diǎn)的出邊和一個點(diǎn)的入邊,因此,每個變量必然同時(shí)關(guān)聯(lián)兩個等量關(guān)系,且分別出現(xiàn)在這兩個等量關(guān)系的等號的左邊和右邊(或者是以一對相反數(shù)形式出現(xiàn));
            <2>如果題目中給出的變量和值關(guān)系不是等量關(guān)系,而是不等關(guān)系,那么可以將剩余的流量通過從源點(diǎn)或往匯點(diǎn)連邊的辦法,使其平衡。比如,若題目中有y1+y2>=x1+x2>=y1+y2-5這樣的關(guān)系,則可以這樣做:設(shè)置一個點(diǎn),將y1、y2代表的邊作為該點(diǎn)的入邊,將x1、x2代表的邊作為該點(diǎn)的出邊,然后從該點(diǎn)往匯點(diǎn)連一條容量為5的邊;
            <3>如果點(diǎn)內(nèi)部有限制(比如某個點(diǎn)自身的權(quán)值不能超過X等等),那么該點(diǎn)內(nèi)部也“暗含”一個變量,此時(shí)就需要拆點(diǎn)(不一定拆成兩個點(diǎn),可能拆成更多的點(diǎn)),然后在拆出的點(diǎn)當(dāng)中再連邊,附加一些限制,然后再考慮流量平衡;
            <4>如果一條邊有上下界,且上下界相等(也就是該邊的流量已經(jīng)定死了),則可以改裝成費(fèi)用流,將這條邊的費(fèi)用設(shè)為一個絕對值很大的負(fù)數(shù),這樣就肯定能保證該邊滿流了。
            例2:餐巾計(jì)劃問題(經(jīng)典問題)
            這個的模型用增廣路思想根本就不能解釋。其實(shí),可以用增廣路思想建立一個模型,但是是錯誤的,可以用下面的“兩條原則”檢查出來。
            <1>對于每天,要處理的餐巾總數(shù)=當(dāng)天買的餐巾總數(shù)+當(dāng)天洗好的餐巾總數(shù)+上一天保留下來的未處理的餐巾總數(shù),這三個當(dāng)作入邊;
            <2>對于每天,要處理的餐巾總數(shù)=送快洗部的餐巾總數(shù)+送慢洗部的餐巾總數(shù)+保存起來留到下一天處理的餐巾總數(shù),這三個都當(dāng)作出邊;
            <3>每天的內(nèi)部有限制:要用的餐巾總數(shù)>=當(dāng)天的需求量,其實(shí),總可以構(gòu)造出要用的餐巾總數(shù)=當(dāng)天的需求量的最優(yōu)方案,所以這些限制其實(shí)是上下界相等的。
            而<1>和<2>剛好描述了每天這個整體的流量平衡,<3>是一個內(nèi)部限制,用拆點(diǎn)解決。仔細(xì)觀察所有的邊可以發(fā)現(xiàn),“當(dāng)天洗好的餐巾總數(shù)”與“送快洗部的餐巾總數(shù)”和“送慢洗部的餐巾總數(shù)”可以合并,“上一天保留下來的未處理的餐巾總數(shù)”與“保存起來留到下一天處理的餐巾總數(shù)”也可以合并。
            這樣,可以構(gòu)造出兩種模型:
            1):第i天拆成兩個點(diǎn)i'和i'',連邊<i', i''>,容量為第i天需求量,費(fèi)用為0;對于任意0<=i<N-1,連邊<i'', (i+1)''>,容量INF,費(fèi)用0;對于任意0<=i<N,連邊<S, i'>,容量INF,費(fèi)用p,連邊<i'', T>,容量INF,費(fèi)用0;對于任意0<=i<N-m,連邊<i'', (i+m)'>,容量INF,費(fèi)用f;對于任意0<=i<N-n,連邊<i'', (i+n)'>,容量INF,費(fèi)用s;求最小費(fèi)用最大流,最小的總費(fèi)用就是結(jié)果;
            2):第i天拆成兩個點(diǎn)i'和i'',連邊<S, i''>和<i', T>,容量均為第i天需求量,費(fèi)用均為0;對于任意0<=i<N-1,連邊<i'', (i+1)''>,容量INF,費(fèi)用0;對于任意0<=i<N,連邊<S, i'>,容量INF,費(fèi)用p;對于任意0<=i<N-m,連邊<i'', (i+m)'>,容量INF,費(fèi)用f;對于任意0<=i<N-n,連邊<i'', (i+n)'>,容量INF,費(fèi)用s;求最小費(fèi)用最大流,最小的總費(fèi)用就是結(jié)果。
            以上兩種模型,看上去都符合題目中的限制,也符合流量平衡,但是,模型1)是錯誤的,模型2)是正確的,這是為什么呢?

            (3)判定網(wǎng)絡(luò)流模型是否正確的兩個原則:
            <1>可行性原則:原題中的每一種可行方案,在建立的網(wǎng)絡(luò)流模型中都對應(yīng)著一個“能求出的”流(一般是滿足一定的條件的流,比如某些邊必須滿流等),注意這里的對應(yīng)必須是“一一對應(yīng)”,就是,既不能有可行方案丟失,也不能出現(xiàn)不可行方案;
            <2>最優(yōu)性原則:原題中的最優(yōu)方案(準(zhǔn)確來說是最優(yōu)方案的結(jié)果),在建立的網(wǎng)絡(luò)流模型中都對應(yīng)著一個“能求出的”量(最大流量或者滿足最大流量的前提下的最小費(fèi)用),也就是,最優(yōu)結(jié)果必須是可以通過這個模型求出的。
            一個網(wǎng)絡(luò)流模型正確,當(dāng)且僅當(dāng)其符合以上兩條原則。
            這兩個原則可以檢查所建立的網(wǎng)絡(luò)流模型是否正確。比如,對于例2中的兩個模型,模型1)由于最大流對應(yīng)的是“買的餐巾總數(shù)盡可能多”的方案,不是最優(yōu)方案,因此原題中的最優(yōu)結(jié)果無法求出,顯然不符合最優(yōu)性原則,因此它是錯誤的。模型2)中,由于可行方案必然能使所有<S, i''>中的邊滿流,且能夠求出,符合可行性原則;最優(yōu)方案由于<i', T>這條邊的限制,必然是最大流,且是費(fèi)用最小的最大流,其最小費(fèi)用為最優(yōu)結(jié)果,符合最優(yōu)性原則,因此它是正確的。

            posted @ 2012-05-11 21:32 Mato_No1 閱讀(3901) | 評論 (3)編輯 收藏

            【首先熱烈祝賀一下進(jìn)入國家隊(duì)的神犇:
            chnlich
            sevenkplus
            zw7840
            plokzfadai
            雅禮再次屠場不解釋)

            也祝賀一下雖然未能進(jìn)入國家隊(duì),但已經(jīng)足夠虐爆全場的神犇:
            WJMZBMR
            s-quark

            CTSC2012得出的最主要的幾條道理:
            (1)實(shí)力強(qiáng)≠比賽成績好,實(shí)力弱≠比賽成績差;
            (2)現(xiàn)在所有的比賽都不是比誰得分多,而是比誰丟分少;
            (3)每個人都會遇到頹廢、迷茫、進(jìn)步慢的時(shí)期,關(guān)鍵是如何尋求出路,以及如何通過自己與外界共同的力量來解決;
            (4)在將某個東東講給別人之前,首先要考慮一下自己是否熟練掌握了這個東東;
            (5)在分析問題,解決問題的過程中,可以通過很多另類的途徑,找到又好想又好寫的辦法。

            部分總結(jié):
            【一試】
            showhand:
            可以將所有的牌型(C(52, 5)=2598960種)全部存儲起來,按照題目中的規(guī)則進(jìn)行排序,存儲在一個線性表里,然后,枚舉A的所有可能的牌型,從上面的線性表中找到比A大且不和A共用同一張牌的方法總數(shù),可以使用容斥原理(方法:設(shè)F[i][t]為牌型i及比i大的牌型中,與i共用牌的屬性壓縮值為t,0<=t<=31表示5位二進(jìn)制數(shù),對應(yīng)位為1表示與i共用,0表示不共用)。而對于B的某些牌一開始就被定死了的情況,用求出的F類似辦法也可搞;

            shortest:
            很好的一道提交答案題。
            先說一下各個測試點(diǎn)的特點(diǎn):
            點(diǎn)1:N<=20,K=10,從1到N的最長路徑若要成為最短路徑,需要刪掉至少11條邊;
            點(diǎn)2~3:N、M較大,K較小(分別為20和10);
            點(diǎn)4:N<=20,邊可以想腫么刪就腫么刪;
            點(diǎn)5~7:原圖分為若干塊,每塊的點(diǎn)數(shù)相等且較小(分別為20、10、10),相鄰兩塊之間有唯一的一條邊相連,點(diǎn)5的邊可以想腫么刪就腫么刪,點(diǎn)6、7刪邊有限制;
            點(diǎn)8:是一個完整的100*100的網(wǎng)格,邊權(quán)均為1,從左上角走到右下角;
            點(diǎn)9:是一個2*1000的網(wǎng)格,中間隨機(jī)刪掉了約20條邊,邊權(quán)是隨機(jī)值,從左上角走到右下角;
            點(diǎn)10:圖中存在一條從1到N的鏈(稱為主鏈),附加了一些邊,邊可以想腫么刪就腫么刪。
            解決辦法:
            點(diǎn)1:搜索(當(dāng)然,狀壓求出最長路+將這11條邊列出來,枚舉保留哪條邊,可以得到一個僅比最優(yōu)解小1的解);
            點(diǎn)2、3:貪心+隨機(jī)化(每次找一條從1到N的最短路,從中隨機(jī)刪掉一條邊,這樣做K次就得到一個方案,然后多次隨機(jī)化后取最優(yōu)方案即可;對于點(diǎn)2,隨機(jī)幾千次就能找到最優(yōu)解了,對于點(diǎn)3,RP好的話需要隨機(jī)1000W次,RP差的話可能需要上億次,估計(jì)總共得耗掉1h以上,因此得早寫);
            點(diǎn)4、5:狀壓DP;
            點(diǎn)6、7:塊內(nèi)狀壓(當(dāng)然由于只有10,暴搜也可),塊之間DP(設(shè)F[i][j]為前i塊刪掉j條邊的最優(yōu)解……)
            點(diǎn)8:直接構(gòu)造……(可以構(gòu)造出一個只有一個點(diǎn)走不到的方案,且可以證明不存在走完所有點(diǎn)的方案);
            點(diǎn)9:搜索/DP + 構(gòu)造(具體的實(shí)現(xiàn)細(xì)節(jié)比較難搞啊囧);
            點(diǎn)10:這個是Hamilton路徑問題,NPC的,因此這個點(diǎn)根本木有辦法搞囧……(當(dāng)然或許有某些經(jīng)過優(yōu)化的搜索能較快找到解)

            【二試】
            cheat:
            80分做法1:首先將所有的字符串拼在一起,中間依次用不同的分隔符隔開,然后對這個大串求后綴數(shù)組求出height,然后就很容易求得每個屬于待查詢串部分的位置i與模板串的最大LCP(直接正著掃一遍、反著掃一邊即可,注意邊界)長度,設(shè)為D[i],接下來就是二分L然后DP了:F[i] = min{F[i+1]+1, F[j]},其中0<=i<len,i+L<=j<=i+D[i],邊界F[len]=0,這個東東顯然是可以用線段樹優(yōu)化的。總時(shí)間復(fù)雜度O(Nlog2N);
            80分做法2:可以發(fā)現(xiàn),對于同一個待匹配串,隨著i的減小,(i+D[i])是不增的,因?yàn)镈[i]最多比D[i+1]大1……這樣可以用單調(diào)隊(duì)列進(jìn)行優(yōu)化,而不需使用線段樹,總時(shí)間復(fù)雜度降為O(NlogN),但是由于后綴數(shù)組常數(shù)過大,還是只有80分囧……
            100分做法:將后綴數(shù)組改為后綴自動機(jī)(詳見WJMZBMR空間)……
            (另外講題的時(shí)候某神犇說可以把后綴數(shù)組的長度減半,從而結(jié)合單調(diào)隊(duì)列得到90分,不過本沙茶木有理解到底是腫么搞的囧……)

            rev:
            點(diǎn)1~2:N=1或M=1,可以暴力搞(要開-O2啊啊啊啊啊啊啊啊啊啊……否則慢死)
            點(diǎn)6:整個矩陣從左到右、從上到下都嚴(yán)格遞減,只要滿足坐標(biāo)限制的都是逆序?qū)Γ梢灾苯佑?jì)算得到;
            點(diǎn)7:只有5和9,且相鄰的兩個格子分別是5和9(其實(shí)可以把5和9看成0和1,相當(dāng)于黑白染色),可以通過枚舉不同情況分類討論計(jì)算得到;
            點(diǎn)8、9:N=M=1000,詢問的區(qū)間都是從頂?shù)降椎模梢酝ㄟ^預(yù)處理得到一個O(N2M)近似暴力的算法,在約5min內(nèi)跑出(開-O2);
            點(diǎn)10:N=M=80,隨機(jī)數(shù)據(jù),可以直接暴力遞推得到;
            點(diǎn)3~5就比較難搞了,本沙茶至今木有搞懂囧……

            posted @ 2012-05-09 22:58 Mato_No1 閱讀(1748) | 評論 (0)編輯 收藏

            【注:本沙茶完成AHOI2007的題目用了3年多……因?yàn)?道題中,有2題是2009年AC的,1題是2010年AC的,剩下3題是2012年AC的……】

            box:
            要求x2=kn+1(k為整數(shù)),即(x+1)(x-1)=kn。因?yàn)?x+1)和(x-1)所可能具有的共同的質(zhì)因數(shù)只有2,因此可以分為兩種情況:(1)x是奇數(shù),且n是4的倍數(shù),此時(shí)可以將(x+1)和(x-1)都除以2,n除以4之后,轉(zhuǎn)化為(x+1)/2或(x-1)/2是n/4的倍數(shù),然后直接求解;(2)其它情況:此時(shí)必然是(x+1)或(x-1)是n的倍數(shù),可以直接求解。注意需要特判一下x=0的情況;

            door:
            求逆矩陣的問題。方法:設(shè)置N*N的矩陣A和B,A初始為待求逆的矩陣,B為單位矩陣,然后,不斷地對A和B同時(shí)實(shí)施相同的初等行變換,直到將A變成單位矩陣為止,此時(shí)B就是A的逆矩陣,若無論如何也不能將A變成單位矩陣,則A無逆矩陣。
            初等行變換有3種:(1)兩行互換;(2)將一行整體乘以一個非0常數(shù);(3)將一行加到另一行上。
            具體操作:類似于高斯消元。第一步,i從0到n-1,在A的第i到(n-1)行中找到一個第i列不為0的(若找不到則A無逆矩陣),并將其與第i行互換(變換1),然后,對第i行后面所有第i列不為0的,將其整行乘以一個非0常數(shù)(變換2),使得其第i列的值剛好是-A[i][i],并將第i行加到這一行上(變換3)使得其第i列變?yōu)?,這樣一直下去,可以把A的下三角全部變?yōu)?;第二步,i從n-1到0,對于第i行第(i+1)列及其以后的每個數(shù),若有不為0的,將其乘上一個常數(shù)(變換2)使得這個數(shù)變?yōu)?1,再用后面的已經(jīng)處理好的單位矩陣對應(yīng)行加到第i行上(變換3),將這個數(shù)變?yōu)?,這樣一直到最后一列為止,最后,要把第i行乘上一個常數(shù)(變換2)使得A[i][i]=1,這樣第i行就處理好了,這樣一直下去,直到所有的行都處理好為止。

            light:
            首先對這個字符串A[0..n-1]進(jìn)行自身exKMP,求出nx數(shù)組,nx[i]表示A[i..n-1]與A[0..n-1]的LCP長度。
            然后,點(diǎn)燈器的長度為p可行的充要條件是:(1)nx[n-p]==p;(2)對于整個nx數(shù)組,取出其所有大于等于p的元素,則相鄰兩個元素的距離(下標(biāo)之差)都不超過p。
            對于第(2)個條件,只要用一個線段樹維護(hù)最大距離就可以了,枚舉p的時(shí)候正、逆序均可,推薦逆序,這樣實(shí)際上等于不斷插入元素,比刪除元素要方便。

            rock:
            超級大水題。只要把矩陣中所有的0變成-1,再求最大子矩陣就行了。

            redcross:
            求01矩陣中最大的某種性質(zhì)的子矩陣類的題目。最暴力的做法顯然是13個數(shù)組(原始數(shù)組+上下左右延伸0的長度+上下左右延伸1的長度+左上左下右上右下延伸的0正方形的邊長),如果把上下左右延伸0和1的長度進(jìn)行合并可以減少到9個數(shù)組,但這樣對于這種如此卡常數(shù)的題目還是會TLE的。其實(shí),可以換一種思考方式,最后只用6個數(shù)組(包括原始數(shù)組)就解決了問題……至于這個是腫么搞的,現(xiàn)在不能說,以后的某一天再說……
            另外這里的最優(yōu)解排序……發(fā)現(xiàn)有驚人的地方么囧……

            maze:
            由于可以隨便走,N<=10,因此可以枚舉前5步的走法和后面5步的走法(其實(shí)全是一樣的,枚舉一次就行了,只是存儲方式不同),把能得到的所有權(quán)值和分最后到達(dá)位置(前5步)和開始位置(后5步)存在數(shù)組里,然后就是二分查找了囧……至于N<10的情況就少幾步枚舉了囧。其實(shí)還是比較難寫的,本沙茶2009年寫這題的時(shí)候?qū)懥苏煌砩希?dāng)然這或許與本沙茶當(dāng)時(shí)太太太太太……弱了有關(guān)(當(dāng)然現(xiàn)在仍然弱)

            posted @ 2012-05-04 18:00 Mato_No1 閱讀(676) | 評論 (0)編輯 收藏

            【最近很想被各種省選題虐……于是,就開始找各種省選題……發(fā)現(xiàn)能虐本沙茶的實(shí)在是太多了(誰叫我是沙茶呢囧)】

            homework:
            很能令人想歪的題目……想到某種數(shù)論模型……
            正解是遞推+矩陣優(yōu)化。可以這么想,本題如果暴力遞推的話,設(shè)F[i]為1到i組成的數(shù)(具體的數(shù),不是取模以后的結(jié)果,雖然這個值是無法存儲的),則有F[i]=(F[i-1]*10T)+i,其中T是i在十進(jìn)制下的位數(shù),邊界F[0]=0。這個式子是可以矩陣優(yōu)化的,矩陣為
            10T 0 0
            1 1 0
            1 1 1
            則1*3矩陣[F[i-1], i-1, 1]乘以這個矩陣之后就是[F[i], i, 1],然后對于各個T分開處理一下就行了……這里的取模完全就是個幌子……
            (另外,矩陣優(yōu)化遞推是一個很重要的專題……)

            race:
            (最近剛好在某MO神犇的資料里面看到了柯西不等式……發(fā)現(xiàn)此題可以用這個來搞……就囧掉了)
            柯西不等式:(a12+a22+...+an2)(b12+b22+...+bn2)>=(a1b1+a2b2+...+anbn)2  【*】,
            等號成立當(dāng)且僅當(dāng)對于任意1<=i, j<=n, i≠j,有aibj-ajbi=0,也就是(a1, b1), (a2, b2)...(an, bn)這n個點(diǎn)共線。具體證明的話,把兩邊的乘法列成一個矩陣的形式,去掉主對角線(相同),把關(guān)于主對角線對稱的位置對應(yīng)相減,得到類似叉積的平方和的形式即可。

            對于本題,假設(shè)不考慮耗油量為負(fù)時(shí)取0的情況,設(shè)F0=(F-Σ(b*Li*Si))/a,則問題就轉(zhuǎn)化為求一組vi使得ΣLivi=F0且Σ(Li/vi)的值最小。這樣,可以設(shè)ai=sqrt(Li/vi),bi=sqrt(Livi),代入【*】式……傻眼了囧……不僅能得到最小值,還能發(fā)現(xiàn)取得最小值時(shí)所有的v都相等,且可以算出來……當(dāng)然如果F0<0就無解了囧……
            不過本題最囧的問題是對于耗油量為負(fù)的情況。最好的處理辦法是,如果按照【*】式得到的v值會導(dǎo)致某些s<0的路段耗油量為負(fù),則對于這些路段單獨(dú)處理,使得它們的耗油量剛好為0(除非此時(shí)的速度已超過上限),并將它們刪去,然后對于剩下的路段,重新代入(*)式計(jì)算v,直到不出現(xiàn)耗油量為負(fù)的情況即可。當(dāng)然,如果在此過程中出現(xiàn)F0<0,就無解了。

            brackets:
            這個應(yīng)該不用再說了,直接看這里

            rectangle:
            思想比較巧妙的話說……應(yīng)該枚舉線段,按照中點(diǎn)和線段長度進(jìn)行排序(因?yàn)閮蓷l線段若能組成矩形的兩對角線,則它們必然等長,且中點(diǎn)重合),然后掃一遍,順帶枚舉就是了……表面上來看時(shí)間復(fù)雜度可能到O(N3)級別,其實(shí)根本無法出卡這種方法的數(shù)據(jù)……

            canon:
            這個沒什么好說的,就是硬推公式,結(jié)果為
            (C(2n, m) - C(2n-1, m/2)) / 2n + C(2n-1, m/2) (當(dāng)m % 4 == 0或3時(shí))
            (C(2n, m) + C(2n-1, m/2)) / 2n - C(2n-1, m/2) (當(dāng)m % 4 == 0或3時(shí))
            對于當(dāng)中的取模問題:加、乘直接取模;減法要在取模后判定是否小于0,若小于0再加上待取模數(shù);除法要轉(zhuǎn)化為乘逆元(反正這里的MOD都是質(zhì)數(shù)……)

            posted @ 2012-04-24 21:25 Mato_No1 閱讀(846) | 評論 (0)編輯 收藏

            相關(guān)鏈接
            今天在回顧以前的題目的時(shí)候,禿然發(fā)現(xiàn)COCI 2011~2012 #5的后兩題并非神犇題(至少一般人可以捉的)……是我當(dāng)時(shí)想傻掉了囧……

            blokovi:
            首先很容易發(fā)現(xiàn)最優(yōu)方案必然是從頂?shù)降祝缺M量往右邊放,放到某一個轉(zhuǎn)折點(diǎn)處再盡量往左邊放……
            然后就是枚舉這個轉(zhuǎn)折點(diǎn),亂算一下就行了,暴力O(N2)的可以過7個點(diǎn)(本沙茶現(xiàn)場賽時(shí)就是用這個的)……
            優(yōu)化:可以從上到下依次枚舉轉(zhuǎn)折點(diǎn),設(shè)目前的轉(zhuǎn)折點(diǎn)為i,則在下一次枚舉時(shí)((i+1)為轉(zhuǎn)折點(diǎn)),把(i+1)往右平移2單位,然后根據(jù)那個重心計(jì)算公式可以得出,第(i+2)個及以后的必然是整體向右平移(2*m2)/(m1+m2),其中m1為前i個的質(zhì)量和,m2為第(i+1)個的質(zhì)量……在此基礎(chǔ)上維護(hù)轉(zhuǎn)折點(diǎn)前重心位置、轉(zhuǎn)折點(diǎn)的重心的橫坐標(biāo)(相對于最上面的那個)以及最下面的那個的重心的橫坐標(biāo)(相對于最上面的那個)就行了(注意轉(zhuǎn)折點(diǎn)是第一個或最后一個的特殊情況要單獨(dú)處理),時(shí)間復(fù)雜度O(N)。

            poplocavanje:
            其實(shí)這題只要用AC自動機(jī)隨便亂搞一下就行了……Trie上的每個結(jié)點(diǎn)維護(hù)一個KK,表示該結(jié)點(diǎn)所代表的字符串的后綴的最大匹配長度(當(dāng)然前提條件是該結(jié)點(diǎn)是危險(xiǎn)的),則:(1)若該結(jié)點(diǎn)本來就代表一個待匹配的子串,則KK值為子串長度;(2)若該結(jié)點(diǎn)是通過失敗指針上溯到一個危險(xiǎn)結(jié)點(diǎn)的,則該結(jié)點(diǎn)的KK就是上溯到的那個危險(xiǎn)結(jié)點(diǎn)的KK。然后做一次匹配,記下所有的匹配區(qū)間,再求出未被區(qū)間覆蓋的總長度(排序+掃描即可,不需任何數(shù)據(jù)結(jié)構(gòu))就行了。

            注意幾個易疵的地方:
            (1)Trie的大小要開到4M才能過(不過再大就要MLE了囧……);
            (2)在建自動機(jī)計(jì)算KK的時(shí)候,如果一個結(jié)點(diǎn)本來就是危險(xiǎn)的(即上述第1種結(jié)點(diǎn)),此過程中又發(fā)現(xiàn)它是上述第2種結(jié)點(diǎn),則能重新計(jì)算KK
            (3)最后求未被區(qū)間覆蓋總長度的方法:先記下所有的區(qū)間,按照先左端點(diǎn)遞增序后右端點(diǎn)遞增序排序,當(dāng)中去掉被別的區(qū)間覆蓋的區(qū)間,然后先看一下排序后的第一個區(qū)間和最后一個區(qū)間,得出第一個區(qū)間之前與最后一個區(qū)間之后的未被覆蓋的部分,中間的掃描求解時(shí),如果某區(qū)間的左端點(diǎn)大于(前一區(qū)間的右端點(diǎn)+1),則計(jì)入中間的空當(dāng)……不過還有一種方法就是不去掉被別的覆蓋的區(qū)間,而是在掃描過程中維護(hù)右端點(diǎn)最大值maxr,然后把上面方法中的所有右端點(diǎn)改為maxr即可。

            代碼:
            blokovi poplocavanje

            posted @ 2012-04-18 20:26 Mato_No1 閱讀(781) | 評論 (0)編輯 收藏

            【很難過吧……考得完爆了……
            ……其實(shí)也沒什么可以說的……都是蒟蒻的借口罷了……
            ……自己果然還只是半吊子水平呢……】


            (結(jié)果:Rank36……我是“真”沙茶!!!!!!!!!!!!!!!Orz Mike_Qiao神犇虐人)


            題解以后再發(fā)。


            posted @ 2012-04-15 01:19 Mato_No1 閱讀(961) | 評論 (3)編輯 收藏

            歷經(jīng)千辛萬苦總算搞定了COCI 2011 OPEN的所有題……真WS啊囧……
            (不過除了sort的滿分算法稍微看了一下題解之外,其它的題目都是自己想出來的……這說明本沙茶想算法的能力并不差……只是所用的時(shí)間有點(diǎn)……)

            sort:很容易想到該置換的循環(huán)分解,然后對每個長度大于1的循環(huán)進(jìn)行一次操作就成了,總操作次數(shù)是長度大于1的循環(huán)個數(shù)。但是,這并不是最優(yōu)解(在官方數(shù)據(jù)中,這個算法能過4個點(diǎn),加上剩下6個點(diǎn)的一半分總共是70分,所以現(xiàn)場結(jié)果中多數(shù)人都是70分……)。最優(yōu)解是先通過一次操作把各個長度大于1的循環(huán)攪亂,使得整個置換只有一個循環(huán),然后再來一次操作就行了,也就是任何置換都最多只要兩次操作就行……至于攪亂的方法,只要在原來的各個循環(huán)(當(dāng)然是長度大于1的)中各抽出一個元素,再對這些抽出的元素執(zhí)行一次題目中的操作即可(證明是很容易的)。不過要注意只需0次或1次操作的情況:當(dāng)原置換長度大于1的循環(huán)總數(shù)為0或1時(shí);
            至于具體的操作構(gòu)造方法隨便亂搞一下就行了囧……

            telka:應(yīng)該算是最水的一題……樹狀數(shù)組的裸模型“改段求段”(具體見這里),唯一值得注意的就是在改段求段模型中的一個注意點(diǎn):當(dāng)l=1的時(shí)候,不能執(zhí)行opr(l-1, c),因?yàn)榉彩窍聵?biāo)遞增的數(shù)組都不能以0作為初始下標(biāo);

            rijeka:這題比較坑人啊囧……如果任意時(shí)刻最多只能載一個人,可以把每個人的要求(也就是每條有向線段)都拆成若干個元線段,然后統(tǒng)計(jì)正反元線段的個數(shù),亂搞一下就成了……不過這題目里面是可以載任意多的人……那么最優(yōu)策略是:先把所有反方向線段覆蓋的總區(qū)間求出來,比如有4->2、6->3、9->8三條反方向線段,則覆蓋的區(qū)間就是[2, 6]和[8, 9],然后在送人的時(shí)候,每送到一個區(qū)間的右端就回頭去把這個區(qū)間內(nèi)的要走反方向的人全送到,然后再回頭往正方向開(比如上例中先從0到6,回到2,再從2到9,回到8,再回頭往前一直開到終點(diǎn)),這樣開到終點(diǎn)時(shí),所有的人就都送到了,因此,總時(shí)間就是(M+反方向線段覆蓋的總長度),用線段樹來搞。此外,由于M太大,需要離散化。

            后面兩題就是猥瑣題了。

            kamion:很明顯是個遞推……但是按照常規(guī)方法根本無法劃分狀態(tài)。不過,要發(fā)現(xiàn)本題和括號序列類的動態(tài)規(guī)劃神似,因此就可以用括號序列的來搞。關(guān)鍵是,對于那些第3種邊(既不含左括號也不含右括號的)比較難搞,另外本題還允許到終點(diǎn)的時(shí)候有左括號(就是大寫字母)剩余,這就明顯加大了難度。
            狀態(tài)設(shè)計(jì)應(yīng)是這樣的:F[i][j][k][s0][s1],表示從i到j(luò)走正好k步,且滿足單多段限制(s0)和多余左括號限制(s1)的合法路徑總數(shù),s0、s1為bool,s0表示是單段還是多段的規(guī)則括號序列,0:單段,1:單段或多段;s1表示是否可以有多余左括號,0:不能有;1:可以有(當(dāng)然也可以木有,也就是s0和s1都是0包含在1之中的)。
            遞推式:
            F[i][j][k][0][0]=ΣF[t1][t2][k-2][1][0](其中<i, t1>邊有一左括號,<t2, j>邊有一右括號,且兩括號匹配);
            F[i][j][k][1][0]=ΣF[t1][t2][k-2][1][0] + Σ(F[i][t][k'][0][0] * F[t][j][k-k'][0][1]) (注意0<k'<k,其它的類似);
            F[i][j][k][0][1]=ΣF[t1][t2][k-2][1][0] + ΣF[i][t][k-1][0][1](其中<i, t>邊有一左括號,其它的類似);
            F[i][j][k][1][1]=
            ΣF[t1][t2][k-2][1][0] + Σ(F[i][t][k'][0][0] * F[t][j][k-k'][1][1]) + ΣF[i][t][k-1][1][1](與上面的限制類似);
            邊界:F[i][i][0][0..1][0..1] = 1,當(dāng)<i, j>邊為第3種邊(不含括號)時(shí),F(xiàn)[i][j][1][0..1][0..1] = 1,其余的均為0。
            這幾個式子還是比較好理解的,要注意的是在計(jì)算F[i][j][k][1][1]時(shí),是F[i][t][k'][0][0]而不是F[i][t][k'][0][1],這是為了防止重復(fù)計(jì)數(shù)(否則,對于序列AB,到底是A是附加上的,B是原來就有的,還是都是附加上的?顯然被計(jì)2次了);
            時(shí)間復(fù)雜度O(N3K2),官方題解里面說這個就能AC了,可是本沙茶實(shí)測的結(jié)果卻有5個TLE,最慢的點(diǎn)達(dá)14+s,可見其常數(shù)之大,本沙茶暫未想出神馬好的優(yōu)化方法,神犇們可以提供一些啊囧(最好能降一維);

            lovci:(這題本沙茶調(diào)了3個晚上啊啊……)
            本沙茶所見過的最猥瑣的暴搜題目了。由于當(dāng)M>0時(shí),初始位置就會被計(jì)入(本題的真正意思是每個格子只被計(jì)入一次,而不是每次移動中初始位置控制不到的地方就計(jì)入一次),因此不用考慮初始位置。仔細(xì)分析題目發(fā)現(xiàn),可以對矩陣進(jìn)行黑白染色,這樣兩個初始位置一個只能控制黑格,一個只能控制白格,這樣就把兩個分開了。然后,把所有的黑格和白格給旋轉(zhuǎn)45度,變成一個十字型,剩下的任務(wù)就是枚舉哪些列被占用,然后再選出哪些行能被占用就行了。
            問題是,有的列不能隨便選,有的行也不能隨便選,這下就囧了,需要很多東東來控制,當(dāng)然,本題需要注意的點(diǎn)太多了,實(shí)在列舉不完,見代碼吧囧。

            代碼:
            sort telka rijeka kamion lovci

            posted @ 2012-04-01 20:42 Mato_No1 閱讀(752) | 評論 (0)編輯 收藏

            僅列出標(biāo)題
            共12頁: 1 2 3 4 5 6 7 8 9 Last 
            91麻豆国产精品91久久久| 一本色道久久综合狠狠躁| 久久99精品国产一区二区三区| www.久久热.com| 久久久久亚洲av综合波多野结衣| 无码人妻久久一区二区三区| 99久久婷婷国产一区二区| 免费精品国产日韩热久久| 亚洲狠狠久久综合一区77777| 婷婷久久五月天| 久久精品无码一区二区三区免费 | 狠狠色狠狠色综合久久| 色综合久久久久综合体桃花网| 欧美亚洲另类久久综合| 亚洲AV无一区二区三区久久| 国产成人久久久精品二区三区| 久久久久亚洲AV无码麻豆| 精品久久久久久久久免费影院| 人妻无码精品久久亚瑟影视| 青青青国产精品国产精品久久久久 | 国内精品综合久久久40p| 久久亚洲精品无码aⅴ大香| 亚洲综合久久夜AV | 色88久久久久高潮综合影院| 性欧美大战久久久久久久久 | 人人狠狠综合88综合久久| 一本一道久久a久久精品综合| 久久久久人妻精品一区三寸蜜桃 | 亚洲人AV永久一区二区三区久久| 久久有码中文字幕| 无码人妻久久一区二区三区免费 | 99久久国产亚洲高清观看2024| 模特私拍国产精品久久| 久久99中文字幕久久| 久久久国产打桩机| 久久精品国产99久久丝袜| 色综合久久久久无码专区 | 精品久久久久久无码国产| 久久夜色精品国产网站| 欧美亚洲国产精品久久高清| AA级片免费看视频久久|