矩阵链相乘问题
输入样例:
在这里给出一组输入。例如:
5
30 35 15 5 10 20
输出样例:
在这里给出相应的输出。例如:
11875
代码:
#include <iostream>
#include<stdio.h>
using namespace std;
long long dp[101][101];
int arr[102][2];
int main()
{ int n;
cin>>n;
cin>>arr[1][0];
for(int i=1;i<=n;i++)
{
if(i>1)arr[i][0]=arr[i-1][1];
cin>>arr[i][1];
}
//dp代表由i乘到j个矩阵所需最小乘数
for(int i=n;i>=1;i--)
for(int j=i+1;j<=n;j++) //填充dp
{
if(j==i+1)dp[i][j]=arr[i][0]*arr[i][1]*arr[j][1];
for(int k=i;k<j;k++)
{
int num = dp[k+1][j]+dp[i][k]+arr[i][0]*arr[k][1]*arr[j][1];
if(k==i||num<dp[i][j])dp[i][j]=num;
}
///cout<<"i="<<i<<",j="<<j<<" "<<arr[i][0]<<" "<<dp[i][j]<<endl;
}
cout<<dp[1][n]<<endl;
return 0;
}