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

            Climber.pI的OI之路

            Through the darkest dark,may we see the light.

            NOIp 2003 加分二叉樹

            形DP,需要記錄方案,并注意空樹的情況.
            [狀態(tài)]f[i][j]從結(jié)點(diǎn)i到j(luò)的最大加分值
            [方程]f[i][j] = max{f[i][k-1]*f[k+1][j]+a[k]} (i<=k<=j)

            實(shí)現(xiàn)方程的時候循環(huán)順序非常關(guān)鍵:結(jié)點(diǎn)數(shù)由小到大循環(huán).否則會出現(xiàn)需要的值未計(jì)算的情況.
            記錄方案可以用一個數(shù)組d[i][j]記錄k,然后遞歸尋找方案并記錄.

             1 #include<stdio.h>
             2 #include<iostream>
             3 using namespace std;
             4 int f[35][35] = {0}, d[35][35] = {0}, ans[35] = {0}, t = 0;
             5 void print(int start, int end){
             6     if (start > end) return;
             7     if (start == end) {ans[++t] = start; return;}
             8     ans[++t] = d[start][end];
             9     print(start, d[start][end]-1);
            10     print(d[start][end]+1, end);
            11 }
            12 int main(){
            13     int n, a[35] = {0}, i, j, k, l;
            14     scanf("%d", &n);
            15     for (i = 1; i <= n; i++){
            16         scanf("%d", &a[i]);
            17         f[i][i-1] = 1;
            18         f[i][i] = a[i];
            19     }
            20     for (l = 2; l <= n; l++)
            21         for (i = 1; i <= n; i++)
            22             for (k = i; k <= i+l-1; k++){
            23                 j = i+l-1;
            24                 if (f[i][j] < f[i][k-1]*f[k+1][j] + a[k]){
            25                     f[i][j] = f[i][k-1]*f[k+1][j] + a[k];
            26                     d[i][j] = k;
            27                 }
            28             }
            29     printf("%d\n", f[1][n]);
            30     print(1, n);
            31     for (i = 1; i < t; i++) printf("%d ", ans[i]);
            32     printf("%d\n", ans[t]);
            33 }
            34 


            posted on 2010-10-05 11:10 Climber.pI 閱讀(1038) 評論(4)  編輯 收藏 引用 所屬分類: 動態(tài)規(guī)劃

            Feedback

            # re: NOIP 2003 加分二叉樹 2010-10-05 11:30 dementrock

            擔(dān)心未計(jì)算用記憶化搜索就行了..  回復(fù)  更多評論   

            # re: NOIP 2003 加分二叉樹 2010-10-06 09:30 Climber.pI

            調(diào)試的時候發(fā)現(xiàn)有未計(jì)算的情況,然后聯(lián)想起usaco里以前看到的某種方法..  回復(fù)  更多評論   

            # re: NOIP 2003 加分二叉樹 2010-10-06 10:31 dementrock

            記憶化搜索是不可能有未計(jì)算的……只可能寫猥了  回復(fù)  更多評論   

            # re: NOIp 2003 加分二叉樹 2010-10-08 21:57 Climber.pI

            @dementrock
            不會爆棧么?  回復(fù)  更多評論   

            综合久久给合久久狠狠狠97色| 亚洲狠狠婷婷综合久久蜜芽| 久久精品中文无码资源站| 日产精品久久久久久久| 久久发布国产伦子伦精品| 国产亚洲美女精品久久久| 热99RE久久精品这里都是精品免费 | 丰满少妇人妻久久久久久| 国产精品久久久天天影视香蕉 | 麻豆精品久久久久久久99蜜桃| 99精品国产综合久久久久五月天| 久久AV高清无码| 理论片午午伦夜理片久久 | 久久久精品久久久久久| 久久久久久精品无码人妻| 久久综合久久综合久久| 久久综合亚洲色HEZYO社区| 国产激情久久久久影院老熟女免费| 亚洲欧美另类日本久久国产真实乱对白| 狼狼综合久久久久综合网| 亚洲国产成人久久一区久久| 97久久超碰成人精品网站| 一本大道久久香蕉成人网| 久久被窝电影亚洲爽爽爽| 久久久无码精品亚洲日韩蜜臀浪潮| 久久夜色撩人精品国产小说| 情人伊人久久综合亚洲| 精品久久久久久久无码| 一本色道久久综合狠狠躁| 亚洲日本久久久午夜精品| 亚洲国产精品综合久久一线| 久久久久国产一区二区| 精品久久久无码中文字幕天天| 久久国产高清字幕中文| 久久国产精品久久久| 国产精品久久久久久久久免费| 国产精品久久久久jk制服| 97久久久精品综合88久久| 久久精品国产99国产精品澳门| 精品午夜久久福利大片| 99精品国产在热久久 |