AOJ : 2254 - 最短ルート (Fastest Route)
問題概要
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2254
日本語の問題文なので省略です.
プログラム
int n; int t[20][20]; int dp[100000]; void solve(){ int to = (1<<n); rep(i,to+2) dp[i] = INT_MAX; dp[0] = 0; rep(i,to){ if(dp[i] == INT_MAX) continue; rep(next,n){ if((i & (1<<next)) != 0) continue; int minCost = t[next][0]; rep(j,n){ if((i & (1<<j)) != 0){ minCost = min(minCost,t[next][j+1]); } } int bit = (i | (1<<next)); dp[bit] = min(dp[bit],dp[i]+minCost); } } cout<<dp[to-1]<<endl; } int main(){ while(cin>>n,n){ rep(i,n){ rep(j,n+1){ cin>>t[i][j]; } } solve(); } }