青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

糯米

TI DaVinci, gstreamer, ffmpeg
隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
數據加載中……

POJ 3123 Ticket to Ride 動態規劃+Minimal Steiner Tree

這題絕對不是蓋的。
題目大意是:
給出一個無向圖,和四對數據。每對數據分別為圖中的兩個點。
要求添加一些邊,使每對點都能連通,讓總邊權最小。

首先考慮一個子問題:指定一些點,添加一些邊,讓它們連通,并且總邊權最小。
這個問題就是Minimal Steiner Tree問題,解決方法可以見這里
這問題不是蓋的,它居然是NP完全問題。。
汗。。今天終于在POJ見識到啥叫NP完全問題了。。

大的問題可以分為多個子問題。可以枚舉所有pair的連接狀況。
比如說 {1和2鏈接,3和4鏈接} 或者 {1獨立,2獨立,3和4鏈接} 等等
一共有15種情況。分別為
    // 1,1,1,1
    {{1},{2},{3},{4}},
    // 1,1,2
    {{1,2},{3},{4}},
    {{1,3},{2},{4}},
    {{1,4},{2},{3}},
    {{2,3},{1},{4}},
    {{2,4},{1},{3}},
    {{3,4},{1},{2}},
    // 2,2
    {{1,2},{3,4}},
    {{1,3},{2,4}},
    {{1,4},{2,3}},
    // 1,3
    {{1,2,3},{4}},
    {{1,2,4},{3}},
    {{1,3,4},{2}},
    {{2,3,4},{1}},
    // 4
    {{1,2,3,4}},

其中有一些是重復的,就可以開一個數組保存下來。
貼一個我的程序。當然,這個是TLE的。。官方的數據需要將近一分鐘才能跑完。
另外一個標程運行飛快,用得是更好的方法,點這里


#include <stdio.h>
#include 
<string.h>
#include 
<algorithm>
#include 
<cmath>

using namespace std;

char names[32][32];
int N, M;
int W[32][32];
const int INF = 10032*32;
int pairs[4];
int dp[256][2], dn;

int getcity(char *s)
{
    
int i;
    
for (i = 0; i < N; i++)
        
if (!strcmp(s, names[i]))
            
break;
    
return i;
}

int prim(int mask)
{
    
int i, j, mc, mi, a, c, t;

    c 
= 0;
    
for (i = 0; i < N; i++
        
if (mask & (1 << i)) {
            a 
= 1 << i;
            c
++;
        }

    t 
= 0;
    
while (--c) {
        mc 
= INF;
        
for (i = 0; i < N; i++)
            
if (a & (1 << i)) 
                
for (j = 0; j < N; j++)
                    
if (((mask ^ a) & (1 << j)) && W[i][j] < mc) {
                        mc 
= W[i][j];
                        mi 
= j;
                    }
        
if (mc == INF)
            
return INF;
        a 
|= 1 << mi;
        t 
+= mc;
    }

    
return t;
}

int K;

int dfs(int start, int mask, int n)
{
    
int i, r;

    
if (n >= K - 2)
        
return prim(mask);
    
    r 
= prim(mask);
    
for (i = start; i < N; i++
        
if ((1 << i) & ~mask) 
            r 
= min(r, dfs(i+1, mask|(1<<i), n+1));

    
return r;
}

int minicost(int mask)
{
    
int i, r;

    
for (i = 0; i < dn; i++)
        
if (mask == dp[i][0])
            
return dp[i][1];

    K 
= 0;
    
for (i = 0; i < N; i++)
        
if (mask & (1 << i))
            K
++;
    
    r 
= dfs(0, mask, 0);

    dp[dn][
0= mask;
    dp[dn][
1= r;
    dn
++;
    
return r;
}

int stats[15][8][8= {
    
// 1,1,1,1
    {{1},{2},{3},{4}},
    
// 1,1,2
    {{1,2},{3},{4}},
    {{
1,3},{2},{4}},
    {{
1,4},{2},{3}},
    {{
2,3},{1},{4}},
    {{
2,4},{1},{3}},
    {{
3,4},{1},{2}},
    
// 2,2
    {{1,2},{3,4}},
    {{
1,3},{2,4}},
    {{
1,4},{2,3}},
    
// 1,3
    {{1,2,3},{4}},
    {{
1,2,4},{3}},
    {{
1,3,4},{2}},
    {{
2,3,4},{1}},
    
// 4
    {{1,2,3,4}},
};

int main()
{
    
int i, j, k, a, b, c, ans;
    
char sa[32], sb[32];

    
while (scanf("%d%d"&N, &M), N) {
        
for (i = 0; i < N; i++)
            scanf(
"%s", names[i]);
        
for (i = 0; i < N; i++)
            
for (j = 0; j < N; j++)
                W[i][j] 
= INF;
        
for (i = 0; i < M; i++) {
            scanf(
"%s%s%d", sa, sb, &c);
            a 
= getcity(sa);
            b 
= getcity(sb);
            W[a][b] 
= W[b][a] = min(W[a][b], c);
        }
        
for (i = 0; i < 4; i++) {
            scanf(
"%s%s", sa, sb);
            a 
= getcity(sa);
            b 
= getcity(sb);
            pairs[i] 
= (1 << a) | (1 << b);
        }

        
// floyd
        for (k = 0; k < N; k++)
            
for (i = 0; i < N; i++)
                
for (j = 0; j < N; j++)
                    W[i][j] 
= min(W[i][k] + W[k][j], W[i][j]);

        dn 
= 0;
        ans 
= INF;
        
for (i = 0; i < 15; i++) {
            c 
= 0;
            
for (j = 0; stats[i][j][0]; j++) {
                a 
= 0;
                
for (k = 0; stats[i][j][k]; k++)
                    a 
|= pairs[stats[i][j][k] - 1];
                c 
+= minicost(a);
            }
            ans 
= min(ans, c);
        }

        printf(
"%d\n", ans);
    }
    
return 0;
}



 

posted on 2011-02-24 00:44 糯米 閱讀(1109) 評論(0)  編輯 收藏 引用 所屬分類: POJ

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区大片| 亚洲第一福利在线观看| 一本一本久久| 亚洲电影观看| 亚洲精品美女在线观看| 亚洲精品日韩精品| 日韩午夜在线视频| 在线亚洲自拍| 亚洲免费视频成人| 久久久久国产精品一区二区| 老司机精品视频网站| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲欧美电影在线观看| 亚洲一区高清| 久久麻豆一区二区| 欧美日韩成人在线视频| 国产精品视频免费| 亚洲国产成人精品久久| 亚洲午夜伦理| 免费日韩av| 一本色道久久88综合日韩精品| 亚洲欧美日韩国产一区二区| 久久视频在线视频| 欧美日韩在线不卡一区| 国产一区二区三区视频在线观看| 亚洲清纯自拍| 乱人伦精品视频在线观看| 91久久精品国产91性色tv| 亚洲一级影院| 欧美+日本+国产+在线a∨观看| 国产精品久久午夜夜伦鲁鲁| 91久久精品一区二区别| 久久国产99| 99在线热播精品免费| 亚洲欧美区自拍先锋| 欧美日韩午夜在线| 欧美v国产在线一区二区三区| 日韩视频在线观看免费| 羞羞色国产精品| 亚洲国产精品女人久久久| 中文精品一区二区三区| 欧美v亚洲v综合ⅴ国产v| 国产精品视频一区二区高潮| 在线日韩电影| 久久夜色精品国产亚洲aⅴ| 亚洲免费观看| 欧美成人免费网站| 在线日韩av| 午夜精品在线| 一区二区三区波多野结衣在线观看| 久久青草久久| 伊人久久婷婷色综合98网| 亚洲欧美成人网| 一区二区av| 国产精品国产三级国产| 日韩一级精品| 亚洲国产99精品国自产| 老色鬼精品视频在线观看播放| 国产真实乱偷精品视频免| 午夜国产精品影院在线观看| 一区二区激情视频| 欧美日韩国产片| 亚洲精品小视频在线观看| 亚洲国产精品一区二区第一页| 久久一区二区三区四区五区| 好吊妞**欧美| 久久精品国产77777蜜臀| 亚洲主播在线播放| 国产视频欧美视频| 久久精品欧美日韩| 久久三级福利| 99re6热在线精品视频播放速度 | 看片网站欧美日韩| 久久精品国产视频| 亚洲第一页在线| 亚洲国产欧美久久| 欧美日韩国产一级片| 午夜精品一区二区三区在线视| 亚洲欧美日韩在线观看a三区| 国内视频一区| 亚洲欧洲精品一区二区三区波多野1战4| 欧美高清视频www夜色资源网| 亚洲免费成人| 国产精品99久久久久久有的能看 | 免费观看成人网| 免费成人高清视频| 一区二区av| 亚洲欧美在线免费| 最新日韩中文字幕| 亚洲特级片在线| 国语自产精品视频在线看一大j8| 欧美华人在线视频| 欧美日韩国产在线观看| 欧美国产精品久久| 欧美电影资源| 亚洲欧美日韩一区二区在线| 欧美中在线观看| 日韩午夜免费视频| 欧美亚洲一级| 亚洲乱码国产乱码精品精98午夜| 亚洲精品乱码久久久久久| 国产精品欧美久久| 欧美高清不卡在线| 国产精品久久久久久影视| 美女视频黄a大片欧美| 欧美日韩在线一二三| 久久亚洲一区二区三区四区| 欧美视频一区| 亚洲福利久久| 国内精品久久久久影院色| 亚洲精品在线视频| 亚洲国产精品999| 午夜一区二区三区在线观看| 在线亚洲精品| 欧美高清视频在线播放| 久久黄色影院| 国产精品久久网站| 亚洲裸体俱乐部裸体舞表演av| 尤物99国产成人精品视频| 亚洲一区中文| 亚洲一区二区欧美| 欧美激情综合亚洲一二区| 欧美va亚洲va香蕉在线| 国产日韩精品一区二区三区| 一卡二卡3卡四卡高清精品视频| 亚洲国产成人久久综合| 久久久www成人免费无遮挡大片| 欧美影院成人| 国产精品久久99| 宅男精品导航| 午夜免费久久久久| 国产精品久久久亚洲一区| 一区二区三区日韩| 亚洲综合精品| 国产精品你懂的在线欣赏| 亚洲图片欧洲图片日韩av| 亚洲自拍高清| 国产精品一区二区久久久久| 亚洲自拍偷拍色片视频| 欧美一区二区视频97| 国产精品美女久久久久久久| 一区二区三区回区在观看免费视频| 亚洲日本成人在线观看| 欧美a级在线| 欧美激情视频一区二区三区免费 | 亚洲国产婷婷香蕉久久久久久99| 久久爱www久久做| 久久久青草婷婷精品综合日韩| 国产一区二区三区久久久| 亚洲免费视频在线观看| 欧美一区二区三区精品| 国产日韩精品一区二区三区 | 欧美视频日韩视频在线观看| 老鸭窝91久久精品色噜噜导演| 午夜精品福利在线| 国产麻豆视频精品| 欧美一区二区三区喷汁尤物| 久久亚洲国产成人| 亚洲电影网站| 欧美日韩中文字幕综合视频 | 亚洲中字黄色| 久久都是精品| 亚洲欧洲精品一区二区三区波多野1战4| 久久婷婷成人综合色| 亚洲精品一区二区三区av| 亚洲在线播放电影| 韩国成人福利片在线播放| 免费国产一区二区| 亚洲最新视频在线播放| 久久精品国产99国产精品澳门| 在线高清一区| 国产精品毛片a∨一区二区三区|国| 亚洲一区欧美激情| 欧美激情一二三区| 欧美一区二区视频免费观看| 91久久中文| 国产精品成人一区二区三区夜夜夜| 欧美一级大片在线免费观看| 91久久国产综合久久| 久久精品亚洲乱码伦伦中文| 99国产精品99久久久久久| 韩国一区二区三区在线观看| 欧美日韩亚洲系列| 久久综合色88| 亚洲免费在线视频| 亚洲美女区一区| 免费精品视频| 久久av资源网| 亚洲亚洲精品三区日韩精品在线视频| 一区二区三区在线观看国产| 国产精品sm| 欧美日本精品一区二区三区| 欧美在线一级va免费观看| 中日韩美女免费视频网站在线观看| 美女啪啪无遮挡免费久久网站| 欧美一级网站| 午夜精品免费| 午夜久久美女| 先锋影音一区二区三区| 中日韩美女免费视频网址在线观看|