区间dp
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int p[N],dp[N][N];
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;++i)
cin>>p[i-1]>>p[i];
memset(dp,0x3f,sizeof dp);
for(int i=1;i<=n;++i) dp[i][i]=0;
for(int l=2;l<=n;++l)
for(int i=1;i<=n;++i)
{
int j=i+l-1;
if(j>n) break;
for(int k=i;k<j;++k)
{
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+p[i-1]*p[k]*p[j]);
}
}
cout<<dp[1][n]<<'\n';
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T=1;
//cin>>T;
while(T--)
{
solve();
}
return 0;
}