YbtOj习题:区间DP 1 删数问题

对于一个区间,要么一次全部删除,要么先删除左边,再删除右边

#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;
}
原文地址:https://www.cnblogs.com/smartljy/p/13576169.html