题目链接

一道裸的区间DP,f[l][r]表示剩下区间[l,r]时的最大价值
可以由f[1~l-1][r]和f[l][r+1~n]转移过来
详见代码:
 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cmath>
 5 using namespace std;
 6 #define N 105
 7 int n,x[N],f[N][N],ans;
 8 int main()
 9 {
10     scanf("%d",&n);
11     for(int i=1;i<=n;i++)
12      scanf("%d",&x[i]);
13     for(int len=n;len>=0;len--)
14      for(int l=1,r;(r=l+len-1)<=n;l++){
15          for(int k=1;k<=l-2;k++)
16           f[l][r]=max(f[l][r],f[k][r]+abs(x[l-1]-x[k])*(l-k));
17          for(int k=r+2;k<=n;k++)
18           f[l][r]=max(f[l][r],f[l][k]+abs(x[k]-x[r+1])*(k-r));
19          f[l][r]=max(f[l][r],f[l-1][r]+x[l-1]);
20          f[l][r]=max(f[l][r],f[l][r+1]+x[r+1]);
21      }
22     for(int i=1;i<=n;i++)
23      ans=max(ans,f[i][i-1]);
24     printf("%d\n",ans);
25     return 0;
26 }

 

相关文章:

  • 2022-12-23
  • 2021-08-11
  • 2022-12-23
  • 2020-10-19
  • 2018-08-24
  • 2022-01-16
  • 2021-05-24
  • 2021-08-18
猜你喜欢
  • 2021-08-19
  • 2021-08-25
  • 2021-06-29
  • 2021-09-07
  • 2022-03-05
  • 2022-12-23
  • 2021-11-09
相关资源
相似解决方案