• PKU 3311 Hie with the Pie 状态DP


    Floyd + 状态DP

    Watashi的板子

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int INF = (int) 1e8;
    
    int dp[1<<11][11]; //dp[S][v] 表示还需访问的集合为S, 现在在v点
    int d[11][11];
    int n;
    
    void floyd() {
        for (int k = 0; k <= n; k++) {
            for (int i = 0; i <= n; i++)
                for (int j = 0; j <= n; j++)
                    d[i][j] = min(d[i][j], d[i][k]+d[k][j]);
        }
    }
    
    void print() {
        for (int i = 0; i <= n; i++) {
            for (int j = 0; j <= n; j++)
                printf("%d ", d[i][j]);
            puts("");
        }
    }
    
    int main() {
        #ifdef Phantom01
            freopen("PKU3311.txt", "r", stdin);
        #endif // Phantom01
    
        while (scanf("%d", &n)!=EOF) {
            if (0==n) break;
            for (int i = 0; i <= n; i++)
                for (int j = 0; j <= n; j++)
                    scanf("%d", &d[i][j]);
    //        print();
            floyd();
    //        print();
    
            for (int i = 0; i <= n; i++)
                for (int S = 0; S < (1<<(n+1)); S++)
                    dp[S][i] = INF;
    
            dp[(1<<(n+1))-1][0] = 0;
            for (int S = (1<<(n+1))-2; S >= 0; S--) {
                for (int v = 0; v <= n; v++) {
                    for (int u = 0; u <= n; u++) {
                        if (!(S&(1<<u))) {
                            if (dp[S][v] < 0) {
                                dp[S][v] = dp[S|(1<<u)][u] + d[v][u];
                            } else {
                                dp[S][v] = min(dp[S][v], dp[S|(1<<u)][u] + d[v][u]);
                            }
                        }
                    }
                }
            }
            printf("%d
    ", dp[0][0]);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    C#:正则表达式
    jsp:
    关于博客的设置
    登录注册案例—MongoDB数据库连接
    cookie封装
    博客样式
    自己的博客
    CentOS7 启动docker.service失败
    合并多个jar包,并通过私服依赖
    springboot+支付宝条码支付开发详解
  • 原文地址:https://www.cnblogs.com/Phantom01/p/3684411.html
Copyright © 2020-2023  润新知