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

            Sephiroth's boring days!!!

            Love just for you.

            動態規劃-最小總代價

            【問題描述】

            n個人在做傳遞物品的游戲,編號為1-n。

            游戲規則是這樣的:開始時物品可以在任意一人手上,他可把物品傳遞給其他人中的任意一位;下一個人可以傳遞給未接過物品的任意一人。

            即物品只能經過同一個人一次,而且每次傳遞過程都有一個代價;不同的人傳給不同的人的代價值之間沒有聯系;

            求當物品經過所有n個人后,整個過程的總代價是多少。

            【輸入】

            第一行為n,表示共有n個人(16>=n>=2);

            以下為n*n的矩陣,第i+1行、第j列表示物品從編號為i的人傳遞到編號為j的人所花費的代價,特別的有第i+1行、第i列為-1(因為物品不能自己傳給自己),其他數據均為正整數(<=10000)。

            (對于50%的數據,n<=11)。

            【輸出】

            一個數,為最小的代價總和。

            【樣例輸入】

            2

            -1 9794

            2724 –1

            【樣例輸出】

            2724


            時間到了啊~ 明天再繼續寫。

            是一個用二進制來表示圖的狀態的動態規劃,或者說是記憶化搜索。f[i][j]中,i來表示圖的二進制狀態,j表示這個狀態中第一個點。

              1: #include <stdio.h>
            
              2: #include <iostream>
            
              3: #define maxn 20
            
              4: #define MAXINT 1000000
            
              5: using namespace std;
            
              6: 
            
              7: int dis[maxn][maxn];
            
              8: int n;
            
              9: int f[70000][20];
            
             10: int ans=MAXINT;
            
             11: 
            
             12: int find(int a,int b)
            
             13: {
            
             14:     if (f[a][b]!=MAXINT) return f[a][b];
            
             15:     int tem=a;
            
             16:     a-=(1<<b);
            
             17:     if (!a)
            
             18:     {
            
             19:         f[tem][b]=0;
            
             20:         return 0;
            
             21:     }
            
             22:     for (int i=0;i<n;++i)
            
             23:         if ((1<<i)&a)
            
             24:             f[tem][b]=min(find(a,i)+dis[b][i],f[tem][b]);
            
             25:     return f[tem][b];
            
             26: }
            
             27: 
            
             28: int main()
            
             29: {
            
             30:     freopen("input.txt","r",stdin);
            
             31:     freopen("output.txt","w",stdout);
            
             32:     
            
             33:     scanf("%d",&n);
            
             34:     for (int i=0;i<n;++i)
            
             35:         for (int j=0;j<n;++j)
            
             36:             scanf("%d",&dis[i][j]);
            
             37:     for (int i=0;i<(1<<n);++i)
            
             38:         for (int j=0;j<n;++j)
            
             39:             f[i][j]=MAXINT;
            
             40:     for (int i=0;i<n;++i)
            
             41:         if (find((1<<n)-1,i)<ans)
            
             42:             ans=find((1<<n)-1,i);
            
             43:     printf("%d\n",ans);
            
             44:     return 0;
            
             45: }
            
             46: 

            posted on 2010-08-30 21:59 Sephiroth Lee 閱讀(445) 評論(0)  編輯 收藏 引用 所屬分類: 信息奧賽

            free counters
            久久66热人妻偷产精品9| 久久精品国产亚洲一区二区三区| 久久婷婷五月综合色奶水99啪| 欧洲国产伦久久久久久久| 久久久无码精品亚洲日韩京东传媒 | 久久久久女人精品毛片| 91久久精品国产成人久久| 欧美成a人片免费看久久| 久久香蕉超碰97国产精品| 99久久免费国产精品| 国产A三级久久精品| 久久丝袜精品中文字幕| 无码专区久久综合久中文字幕 | 久久久噜噜噜久久中文字幕色伊伊 | 久久综合九色综合欧美就去吻| 久久天堂AV综合合色蜜桃网 | 蜜桃麻豆www久久| 漂亮人妻被中出中文字幕久久| 久久亚洲国产欧洲精品一| 色综合久久无码中文字幕| 久久高清一级毛片| 久久99精品国产99久久6男男| 久久久久久久免费视频| 久久精品亚洲乱码伦伦中文| 好久久免费视频高清| 久久精品中文无码资源站| 国产99久久久国产精品小说| 人妻中文久久久久| 久久亚洲中文字幕精品一区四 | 久久久无码精品亚洲日韩软件| 99久久精品费精品国产一区二区| 亚洲精品乱码久久久久久蜜桃不卡 | 丁香狠狠色婷婷久久综合| 日韩精品久久无码人妻中文字幕 | 国内精品九九久久久精品| 亚洲精品国产美女久久久| 精品综合久久久久久98| 久久久久久精品免费看SSS| 波多野结衣久久| 一本色道久久88精品综合| 无码人妻精品一区二区三区久久|