首页 > 其他 > 详细

【洛谷P2426】删数

时间:2018-07-24 14:45:53      阅读:173      评论:0      收藏:0      [点我收藏+]

删数

题目链接

一道裸的区间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 }

 

【洛谷P2426】删数

原文:https://www.cnblogs.com/yjkhhh/p/9359752.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!