看《算法导论》上动态规划一章里有这个例子,找了个等价的题做做。
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <string>
#include <cstring>
using namespace std;
const int MAXL = 2147483647;
int main(){
int n;
cin>>n;
int chain=n-1;
vector<vector<int>> m;
vector<int> p;
for(int i = 0; i < n; i ++){
int pui;
cin>>pui;
p.push_back(pui);
}
vector<int> temp;
temp.reserve(chain);
for(int i=0; i<chain; i++){
temp.push_back(MAXL);
}
for(int i=0; i<chain; i++){
m.push_back(temp);
}
for(int i=0; i<chain; i++){
m[i][i]=0;
}
for(int len=2; len<=chain; len++){
for(int i=0; i<chain-len+1; i++){
int j=i+len-1;
for(int k=i; k<j; k++){
int q=m[i][k]+m[k+1][j]+p[i]*p[k+1]*p[j+1];
if(q<m[i][j])
m[i][j]=q;
}
}
}
cout<<m[0][chain-1];
return m[0][chain-1];
}