描述
输入
输入共n+1行
第一行输入矩阵的总个数n[2,1000]
后n行分别输入矩阵的维数[1,100]
输出
最后一行输出少乘法次数
输入样例 1
6
30 35
35 15
15 5
5 10
10 20
20 25
输出样例1
15125
代码实现
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define x first
#define y second
class solution
{
public:
solution(const vector<pair<int,int>>& v,int n)
{
vector<vector<int>> dp(n,vector<int>(n,0));
for(int len=1;len<n;len++)
{
for(int i=0;i<n-len;i++)
{
int j=i+len;
if(len==1)
{
dp[i][j]=v[i].x*v[i].y*v[j].y;
}
else
{
dp[i][j]=dp[i][i]+dp[i+1][j]+v[i].x*v[i].y*v[j].y;
for(int k=i+1;k<j;k++)
{
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+v[i].x*v[k].y*v[j].y);
}
}
}
}
cout<<dp[0][n-1]<<endl;
}
};
int main()
{
int n,a,b;
cin>>n;
vector<pair<int,int>> v;
for(int i=0;i<n;i++)
{
cin>>a>>b;
v.push_back(make_pair(a,b));
}
solution p(v,n);
return 0;
}