for(int len=1;len<n;len++){ //枚举长度 for(int i=1;i+len<=n;i++){ //枚举起始位置 int j=i+len; dp[i][j]=dp[i+1][j]+dp[i][i]; //默认左子树为null root[i][j]=i; //默认从起点选根 for(int k=i+1;k<j;k++){ if(dp[i][j]<dp[i][k-1]*dp[k+1][j]+dp[k][k]){ dp[i][j]=dp[i][k-1]*dp[k+1][j]+dp[k][k]; root[i][j]=k; } } } }