//Accepted 200 KB 0 ms //dp区间 //dp[i][j]=min(dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]) i<k<j #include <cstdio> #include <cstring> #include <iostream> using namespace std; ; ; int dp[imax_n][imax_n]; int a[imax_n]; int n; int min(int a,int b) { return a<b?a:b; } void Dp() { ;i<=n-;i++) dp[i][i+]=a[i]*a[i+]*a[i+]; ;l<=n;l++) { ;i<=n;i++) { ; if (j>n) break; dp[i][j]=Pinf; ;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]); //printf("dp[%d][%d]=%d\n",i,j,dp[i][j]); } } printf(][n]); } int main() { while (scanf("%d",&n)!=EOF) { ;i<=n;i++) scanf("%d",&a[i]); Dp(); } ; }