对于一个区间,要么一次全部删除,要么先删除左边,再删除右边
#include<bits/stdc++.h> using namespace std; const int N=110; int n,f[N][N]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&f[i][i]); } for(int len=2;len<=n;len++) for(int l=1;l+len-1<=n;l++) { int r=l+len-1; for(int k=l;k<=r;k++) if(k==r) f[l][r]=max(f[l][r],len*abs(f[l][l]-f[r][r]));//只能一次消完 else f[l][r]=max(f[l][r],f[l][k]+f[k+1][r]); } printf("%d",f[1][n]); return 0; }