今天写的是我的第二篇动规,区间动规——看起来和堆好像。
我从别人(博客)那里学了一点,是这个人的
http://blog.csdn.net/a351357741/article/details/6493945
我看了一遍,自己写的,但算法思路基本一致,下面是代码
#include<stdio.h>
int N;
int a[200*2];
int dp[200*2][200*2];
int main()
{
scanf("%d",&N);
int i,j,k;
int len=2;
int max;
int E=0;
for(i=1;i<=N;i++)
{
scanf("%d",&a[i]);
a[N+i]=a[i];
}
for(len=2;len<=N;len++)//len为合成珠子数
{
for(i=1;i<=2*N;i++)//第几个珠子坐标(2*N是将前面重复的再算一遍)
{
j=i+len-1;//j为珠子末数字
max=0;
for(k=i;k<j;k++)
{
if(max<dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1])
max=dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*a[j+1];
}
dp[i][j]=max;
if(E<dp[i][j])
E=dp[i][j];
}
}
printf("%d",E);
return 0;
}
比较简单,所以很繁琐,欢迎批评。