用记忆化搜索出现点小问题。以后还是改用for了。 #include <stdio.h> #define MAXINT 1000000 #define maxn 110 int f[maxn][maxn]; int a[maxn]; int n; int main() { scanf("%d",&n); for (int i=1;i<=n;++i) for (int j=1;j<=n;++j) f[i][j]=MAXINT; for (int i=1;i<=n;++i) scanf("%d",&a[i]); for (int i=1;i<=n;++i) f[i][i-1]=f[i][i]=f[i][i+1]=0; for (int i=2;i<n;++i) f[i-1][i+1]=a[i-1]*a[i]*a[i+1]; for (int i=n-2;i>0;--i) for (int j=i+2;j<=n;++j) for (int k=i+1;k<j;++k) if (f[i][j]>f[i][k]+a[i]*a[k]*a[j]+f[k][j]) f[i][j]=f[i][k]+a[i]*a[k]*a[j]+f[k][j]; printf("%d/n",f[1][n]); return 0; }