DP 复习。git
参考 redbag 博客 提供的题表。github
区间 DP。code
转换思路,题面从外往里递推,咱们采用从里往外递推,权值逐级递减的反向实现方式。get
选择区间左端点或右端点更新答案。博客
int n, a[2003], f[2003][2003]; int main() { scanf("%d", &n); for (int i=1; i<=n; ++i) scanf("%d", &a[i]), f[i][i]=a[i]*n; for (int k=1; k<n; ++k) for (int i=1; i+k<=n; ++i) f[i][i+k]=max(f[i+1][i+k] + a[i]*(n-k), f[i][i+k-1] + a[i+k]*(n-k)); printf("%d\n", f[1][n]); return 0; }
多重背包。it