• <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>

            Onway

            我是一只菜菜菜菜鳥(niǎo)...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

            pku 1221 UNIMODAL PALINDROMIC DECOMPOSITIONS

            Posted on 2010-07-29 11:07 Onway 閱讀(483) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 傷不起的ACM

            pku 1221   UNIMODAL PALINDROMIC DECOMPOSITIONS
            http://acm.pku.edu.cn/JudgeOnline/problem?id=1221
            題意:給定一個(gè)n,求串里元素之和為n的數(shù)字回文串的個(gè)數(shù)。

            這個(gè)題目想了我很久,看著所有討論都說(shuō)是簡(jiǎn)單題,想死的心都有。
            最后自己還是想不出來(lái),看了人家的DP狀態(tài)設(shè)計(jì)才寫(xiě)出來(lái)了。

            剛開(kāi)始,總是往一維DP(其實(shí)不算DP吧,都沒(méi)有狀態(tài)轉(zhuǎn)移的,只是簡(jiǎn)單的遞推而已)里想,
            還想出了其他一些結(jié)論,只是還不至于能解出這個(gè)題,說(shuō)白了就是,還是沒(méi)想到。
            以下的內(nèi)容都是參考了網(wǎng)上已經(jīng)擺放了N久的題解,加上了自己的理解而已。

            假設(shè)dp[i][j]為:將i這一個(gè)數(shù)拆分為串里元素均不少于j的回文串的總個(gè)數(shù)。
            對(duì)于這種狀態(tài)設(shè)計(jì)的理解很重要,至少要理解里面的兩個(gè)意思:
            1,串里元素均不少于j,也就是這些回文串最外面的兩個(gè)數(shù)至少為j。
            2,當(dāng)j=1時(shí),dp[i][j]即表示,元素之和為i的回文串的總個(gè)數(shù),因?yàn)樵刂辽俣家獮?。
             很明顯,dp[i][1]包含了dp[i][2],dp[i][2]又包含了dp[i][3]……。


            然后對(duì)于dp[i][j],再分兩層理解來(lái)設(shè)計(jì)轉(zhuǎn)移方程:
            1,當(dāng)最外面的兩個(gè)元素為j的時(shí)候,這兩個(gè)元素之間的其他元素之和就為i-2*j。
             dp[i-2*j][j]里的所有個(gè)數(shù)只要往兩邊加上j就變成了dp[i][j]的一部分解。
            2,當(dāng)最外面的兩個(gè)元素大于j的時(shí)候,只要將dp[i][j]加上dp[i][j+1]即可。
             因?yàn)閐p[i][j+1]包含了dp[i][j+2]。

            所以DP方程可以設(shè)計(jì)為下:

            dp[i][j]=dp[i][j+1]+dp[i-2*j][j];

            然后是處理這個(gè)方程的邊界條件。j<=i,當(dāng)j==i的時(shí)候,dp[i][j]==1;

            當(dāng)i-2*j<0的時(shí)候,即代表i不能拆分,應(yīng)直接加0
            當(dāng)i-2*j==0的時(shí)候,這時(shí)該這么理解,i可以拆分為最外兩個(gè)元素為j,中間元素為0
            即不存在中間元素,這時(shí)的回文串只有一個(gè),即(j,j)。所以dp[0][j]應(yīng)初始化為1

             1#include <iostream>
             2using namespace std;
             3__int64 dp[301][301];  //假設(shè)了數(shù)組最大的輸入為300。
             4int main()
             5{
             6    int i,j;
             7    for(i=1;i<=300;++i)  //初始化,詳細(xì)見(jiàn)上。
             8    {
             9        dp[0][i]=1;    
            10        dp[i][i]=1;
            11    }

            12    for(i=2;i<=300;++i)
            13        for(j=i-1;j>=1;--j)
            14        {
            15            dp[i][j]=dp[i][j+1]+(i>=2*j?dp[i-2*j][j]:0);
            16            //如果不對(duì)i-2*j進(jìn)行判斷,會(huì)導(dǎo)致數(shù)組訪問(wèn)下溢
            17        }

            18    int n;
            19    while(scanf("%d",&n)!=EOF&&n)
            20    {
            21        printf("%d %I64d\n",n,dp[n][1]);
            22    }

            23    return 0;
            24}

            25
            国产精自产拍久久久久久蜜| 97视频久久久| 欧美牲交A欧牲交aⅴ久久| 国产呻吟久久久久久久92| 久久精品国产99久久无毒不卡| 国产A级毛片久久久精品毛片| 亚洲国产成人久久综合区| 久久精品女人天堂AV麻| 狠狠久久综合| 合区精品久久久中文字幕一区| 欧美久久天天综合香蕉伊| 久久久久这里只有精品 | 亚洲va久久久噜噜噜久久男同| 久久青青色综合| 久久久久无码中| 亚洲国产精品成人久久蜜臀 | 久久精品国产亚洲AV无码麻豆| 热re99久久精品国99热| 99久久久精品免费观看国产| 久久99免费视频| 久久e热在这里只有国产中文精品99| 久久五月精品中文字幕| 香蕉久久AⅤ一区二区三区| 99久久精品国产一区二区| 久久久噜噜噜www成人网| 久久伊人精品青青草原高清| 国内精品久久久久久久涩爱 | 国产婷婷成人久久Av免费高清| 2021久久国自产拍精品| 久久亚洲天堂| 久久精品人人做人人爽电影蜜月 | .精品久久久麻豆国产精品| 国产精品日韩欧美久久综合| 国产精品久久新婚兰兰| 91精品国产高清久久久久久io| 国内精品欧美久久精品| 中文字幕乱码久久午夜| 久久综合久久综合久久| 欧美激情一区二区久久久| 九九久久精品无码专区| 久久男人Av资源网站无码软件 |