挑程:矩阵乘积链(区间dp)

发布时间 2023-09-01 12:03:27作者: ruoye123456

传送

区间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;
}