这是一道提高组的水题。
典型的区间 dp 题目。
由于项链是一个环,我们将序列复制一遍,形成一个环。
状态转移方程: f[l][r]=max(f[l][r],f[l][k]+f[k+1][r]+c[l]*c[k+1]*c[r+1]);
代码第一个循环是枚举区间长度( len ),第二个是枚举左端点(与右端点),第三个是枚举的断点。
dp 代码,由于成环,所以数组需要开两倍。
最后,由于要求最大值,所以我们要求 max(ans,dp[i][i+n-1]) 。
最后,给出关键代码:
for(int len=2;len<=n;len++){
for(int l=1;l+len-1<2*n;l++){
int r=l+len-1;
for(int k=l;k<r;k++){
dp[l][r]=max(dp[l][r],dp[l][k]+dp[k+1][r]+a[l]*a[k+1]*a[r+1]);
}
}
}