Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Matrix Chain Multiplication"
https://onlinejudge.u-aizu.ac.jp/problems/ALDS1_10_B
・連鎖行列積
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #ALDS1_10_B : Matrix Chain Multiplication
/* Aizu Online Judge in C++ #ALDS1_10_B : Matrix Chain Multiplication https://onlinejudge.u-aizu.ac.jp/problems/ALDS1_10_B 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int n,p[101],m[101][101]; int f(void){ for(int i=1;i<=n;i++){ m[i][i]=0; } for(int l=2;l<=n;l++){ for(int i=1;i<=n-l+1;i++){ int j=i+l-1; m[i][j]=1<<25; for(int k=i;k<=j-1;k++){ m[i][j]=min(m[i][j],m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]); } } } return m[1][n]; } int main(void){ cin>>n; for(int i=0;i<n;i++){ cin>>p[i]>>p[i+1]; } cout<<f()<<endl; return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/