状态压缩DP 初邂逅

来源:互联网 发布:孙俪的淘宝店铺等花开 编辑:程序博客网 时间:2024/06/05 03:39
#include <bits/stdc++.h>using namespace std;#define INF 0x7ffffff#define maxn 20int n;int dp[1<<maxn][maxn];int d[maxn][maxn];int dfs(int S, int v){    if(dp[S][v] != -1) return dp[S][v];    if(S==(1<<n)-1 && v==0)        return dp[S][v] = 0;    int res = INF;    for(int u=0; u<n; u++)        if(!(S>>u & 1))    {        res = min(res, dfs(S|1<<u, u)+d[v][u]);    }    return dp[S][v] = res;}int main(){    int m;    while(~scanf("%d%d", &n, &m))    {        int u, v, w;        for(int i=0; i<maxn; i++)            for(int j=0; j<maxn; j++)            d[i][j] = INF;        memset(dp, -1, sizeof(dp));        for(int i=0; i<m; i++)            {                scanf("%d%d%d", &u, &v, &w);                d[u][v] = w;            }        cout<<dfs(0, 0)<<endl;    }    return 0;}/*5 84 0 74 1 63 4 32 3 52 0 41 2 50 3 40 1 3*/

1 0