Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Fastest Route"
https://onlinejudge.u-aizu.ac.jp/problems/2254
・最短ルート
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #Volume22 : 2254 - Fastest Route
/* Aizu Online Judge in C++ #Volume22 : 2254 - Fastest Route https://onlinejudge.u-aizu.ac.jp/problems/2254 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll dp[1<<16],t[16][17],n; ll f(ll s){ if(dp[s]!=-1){ return dp[s]; } if(s==(1<<n)-1){ return dp[s]=0; } ll num=1<<26; for(ll i=0;i<n;i++){ if(!((s>>i)&1)){ ll k=t[i][0]; for(ll j=0;j<n;j++){ if(((s>>j)&1)){ k=min(k,t[i][j+1]); } } num=min(num,f(s|(1<<i))+k); } } return dp[s]=num; } int main(void){ while(cin>>n,n){ for(ll i=0;i<n;i++){ for(ll j=0;j<=n;j++){ cin>>t[i][j]; } } memset(dp,-1,sizeof(dp)); cout<<f(0)<<endl; } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/