思路
- 设dp[i][j]表示从编号为i的点到编号为j的点的最小解
- 状态转移方程: dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+ijk)(其中i<k<j)
代码
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
long long dp[550][550];
int main(){
int n;
cin >> n;
for(int len=2;len<n;len++){
for(int i=1;i+len<=n;i++){
dp[i][i+len]=0x3f3f3f3f;
for(int k=i+1;k<i+len;k++){
dp[i][i+len]=min(dp[i][i+len],dp[i][k]+dp[k][i+len]+i*(i+len)*k);
}
}
}
cout << dp[1][n];
}