区间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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-11 11:05:24