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

            oyjpArt ACM/ICPC算法程序設(shè)計(jì)空間

            // I am new in programming, welcome to my blog
            I am oyjpart(alpc12, 四城)
            posts - 224, comments - 694, trackbacks - 0, articles - 6
            動(dòng)態(tài)規(guī)劃成立的條件中有一條:無(wú)后效性。

            典型的比較就是多階段路徑問(wèn)題與MOD4最優(yōu)路徑問(wèn)題:前者無(wú)后效性 后者有

            MOD4最優(yōu)路徑問(wèn)題: 找到1-N的一條MOD4的余數(shù)最小的路徑。

            顯然不滿足無(wú)后效性 但是我們可以這樣轉(zhuǎn)化:(呵呵 我看書(shū)的)

            增加狀態(tài)的維數(shù),將最優(yōu)化問(wèn)題轉(zhuǎn)會(huì)為判定性問(wèn)題。

            設(shè) f[k][i] 為bool型數(shù)組,表示從1點(diǎn)到K點(diǎn)長(zhǎng)度mod4為i的路徑是否存在。

            顯然如果dis[k-1][k]代表k-1的點(diǎn)到k的距離 由f[k-1][i-dis[k-1][k]]=TRUE 可以推出 f[k][i]=TRUE;

            那么如果到從k-1的點(diǎn)到k的路徑有M條,我們就可以由這M個(gè)狀態(tài)的邏輯或得到 f[k][i]的真假。

            呵呵 這樣就把動(dòng)態(tài)規(guī)劃的思想運(yùn)用到了不能用動(dòng)態(tài)規(guī)劃解決的問(wèn)題。。
            §

            Feedback

            # re: 如何將動(dòng)態(tài)規(guī)劃解決不了的問(wèn)題轉(zhuǎn)化為判定性問(wèn)題  回復(fù)  更多評(píng)論   

            2006-08-16 10:43 by cainiao
            這位大哥..
            偶是acm菜鳥(niǎo)...
            你能給我講講pku 2738 的解題思路么..
            email nsdy.wu@126.com

            # re: 如何將動(dòng)態(tài)規(guī)劃解決不了的問(wèn)題轉(zhuǎn)化為判定性問(wèn)題  回復(fù)  更多評(píng)論   

            2006-08-17 00:03 by Optimistic
            Nice to meet you here,
            Very glad to share my ideas with you.
            思維:
            看到這題首先分析情形。初看似乎可以貪心,(偶WA了一次貪心).但是WA后,發(fā)現(xiàn)貪心出不了最優(yōu)解(因?yàn)榭赡軙?huì)有多組相同的解).
            搜索顯然不行 ,1000的長(zhǎng)度 + multiple test case => absolutely TLE.
            于是考慮DP.
            是否滿足最優(yōu)子結(jié)構(gòu)?恩。因?yàn)槿肿顑?yōu)解包含局部最優(yōu)解.
            是否滿足無(wú)后效性? 恩。當(dāng)前所作決策可由當(dāng)前狀態(tài)唯一確定.
            OK.DP.
            首先是狀態(tài).不用說(shuō),用d[i][j]表示當(dāng)前i->j的最大可能值(即2號(hào)選手少的分)
            接著是狀態(tài)轉(zhuǎn)移.d[i][j]可能是兩個(gè)方向轉(zhuǎn)過(guò)來(lái)的,即選了最前面一個(gè)或最后面一個(gè).然后2nd player也應(yīng)該會(huì)有一個(gè)相應(yīng)的選擇.(具體見(jiàn)程序)
            做好初始化的工作,就OK啦

            Solution:

            #include <stdio.h>
            #include <string.h>
            #include <math.h>

            int a[1010], n, d[1010][1010];

            int SecondDecision(int i, int j) //return which the Second player would like to get
            {
            if(a[i] >= a[j]) return i;
            return j;
            }

            int Cal() //Dynamic Programming
            {
            int l, i, j, temp = 0;
            for(i=1; i<n; i++)
            d[i][i+1] = abs(a[i] - a[i+1]);
            for(l = 4; l <= n; l += 2) //case length=2 has been calculated
            for(i=1; i<=n-l+1; i++)
            {
            j = i+l-1;
            if(SecondDecision(i+1, j) == j && d[i+1][j-1] >= 0)
            {
            temp = d[i+1][j-1] + a[i] - a[j];
            d[i][j] = temp > d[i][j] ? temp : d[i][j];
            }
            else if(d[i+2][j] >= 0)
            {
            temp = d[i+2][j] + a[i] - a[i+1];
            d[i][j] = temp > d[i][j] ? temp : d[i][j];
            }

            if(SecondDecision(i, j-1) == j-1 && d[i][j-2] >= 0)
            {
            temp = d[i][j-2] + a[j] - a[j-1];
            d[i][j] = temp > d[i][j] ? temp : d[i][j];
            }
            else if(d[i+1][j-1] >= 0)
            {
            temp = d[i+1][j-1] + a[j] - a[i];
            d[i][j] = temp > d[i][j] ? temp : d[i][j];
            }
            }
            return d[1][n];
            }

            int main()
            {
            // freopen("ends.in", "r", stdin);
            int i, ntc = 0;
            while(scanf("%d", &n), n>0)
            {
            ntc++;
            memset(a, 0, sizeof(a));
            memset(d, -1, sizeof(d));
            for(i=1; i<=n; i++)
            scanf("%d", &a[i]);
            printf("In game %d, the greedy strategy might lose by as many as %d points.\n", ntc, Cal());
            }
            return 0;
            }
            //代碼寫(xiě)的不好 將就著看吧


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            亚洲日韩中文无码久久| 久久精品国产亚洲AV香蕉| 久久精品一区二区三区中文字幕| 久久综合九色综合精品| 精品无码久久久久久国产| 欧美精品国产综合久久| 国产精品久久网| 久久婷婷午色综合夜啪| 91精品国产乱码久久久久久 | 精品综合久久久久久88小说| 亚洲美日韩Av中文字幕无码久久久妻妇| 久久天天躁夜夜躁狠狠躁2022| 国产精品久久久久久一区二区三区 | 亚洲美日韩Av中文字幕无码久久久妻妇 | 青青青国产精品国产精品久久久久| 久久er国产精品免费观看8| 人妻精品久久无码区| 无码精品久久一区二区三区| 美女写真久久影院| 久久精品a亚洲国产v高清不卡| 伊人久久大香线蕉综合5g| 精品久久久久久国产免费了| 国产精品久久久福利| 久久久精品国产sm调教网站| 亚洲精品无码久久毛片 | 久久精品国产精品亚洲精品 | 蜜桃麻豆www久久| 亚洲精品乱码久久久久久蜜桃不卡 | 久久夜色撩人精品国产| 一本久久久久久久| 久久国产乱子伦精品免费强| 人妻无码αv中文字幕久久琪琪布| 精品久久久久久无码不卡| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲午夜精品久久久久久app| 久久久久香蕉视频| 久久夜色精品国产www| 亚洲人AV永久一区二区三区久久| 精品熟女少妇aⅴ免费久久| 久久久久国产一区二区| 久久笫一福利免费导航 |