区间dp
dp[i][j]表示[i,j]这个区间的最大值,那么dp[i][j]=max(dp[i][j],dp[i][k]*dp[k+1][j])
注意初始化就好了
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int dp[111][111];
int main()
{
int n;
scanf("%d",&n);
memset(dp,0,sizeof(dp));
int num=1;
for(int i=n-1;i>=0;i--)
{
for(int j=i;j<n;j++)
{
if(j>=i) dp[i][j]=(j-i)+1;
for(int k=i;k<j;k++)
{
dp[i][j]=max(dp[i][j],dp[i][k]*dp[k+1][j]);
}
}
}
printf("%d\n",dp[0][n-1]);
return 0;
}