区间DP基础题
只贴代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define maxn 0xfffffff
int main()
{
int n,i,j,k,l;
int num[1111],dp[1111][1111];
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
//memset(dp,maxn,sizeof(dp));
memset(dp,0,sizeof(dp));
for(i=2;i<=n-1;i++)
dp[i][i]=num[i-1]*num[i]*num[i+1];
for(l=1;l<n-2;l++)
for(i=2;i<n-1;i++)
{
j=i+l;
dp[i][j]=maxn;
for(k=i;k<=j;k++)
{
dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k+1][j]+num[i-1]*num[k]*num[j+1]);
//printf("%d %d %d\n",i,j,dp[i][j]);
}
}
printf("%d\n",dp[2][n-1]);
return 0;
}