• <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 閱讀(458) 評論(0)  編輯 收藏 引用 所屬分類: 信息奧賽

            free counters
            91精品国产色综久久| 中文字幕精品无码久久久久久3D日动漫 | 久久婷婷五月综合色高清| 亚洲中文字幕无码一久久区| 日韩精品久久无码人妻中文字幕| 国产精品久久久久久久久鸭 | 日韩精品无码久久久久久| 色综合久久天天综合| 久久99这里只有精品国产| 久久成人国产精品二三区| 日韩欧美亚洲综合久久影院Ds | 久久香蕉国产线看观看乱码| 精品久久久久久无码人妻热| 亚洲伊人久久精品影院| 久久综合中文字幕| 久久国产精品一国产精品金尊| 久久国产成人午夜AV影院| 亚洲精品无码久久久久| 久久国产综合精品五月天| 国产精品久久久久久久久| 久久亚洲精品无码VA大香大香| 岛国搬运www久久| 久久被窝电影亚洲爽爽爽| 久久综合九色综合网站| 久久久亚洲AV波多野结衣| 亚洲国产高清精品线久久| 狠狠人妻久久久久久综合| yellow中文字幕久久网 | 亚洲国产成人久久综合区| 18岁日韩内射颜射午夜久久成人 | 欧美亚洲另类久久综合| 国产精品18久久久久久vr | 国内精品久久久久久不卡影院| 精品国产一区二区三区久久久狼| 亚洲香蕉网久久综合影视| 色老头网站久久网| 国产精品久久久久久五月尺| 欧美激情精品久久久久久久| 色99久久久久高潮综合影院 | 伊人色综合九久久天天蜜桃| 久久综合九色欧美综合狠狠|