洛谷题目传送门

一眼看去:区间DP

数据范围:三重循环

好了不装B了,开始说正事

这题非常明显是区间DP。

按照惯例,先定义状态。

分析题目,发现除了区间左端点和右端点之外,什么也不需要加进状态里。因为显而易见除了区间左右端点,没有什么能够影响答案。

所以我们定义状态\(dp[l][r]\)为区间\([l,r]\)的最大答案。

这个“操作价值”可以两重循环预处理出来,所以用\(pre[l][r]\)代表删除区间\([l,r]\)的最大价值。非常明显的,甚至题目里已经直接写明白了, 其实不用预处理,现场算就行,反正是\(O(1)\)的

\[pre[l][r]=
\begin{cases} a[l],
& \text {$l=r$} \\
|a[l]-a[r]|\times (r-l+1), & \text{$else$} \end{cases}
\]

然后就是最重要的一步——状态转移方程。

题目里有一个操作,就是一个区间删除一些数,失去一些“潜在的”价值。那么把这个过程反过来,一个区间加上一些数,得到一些“潜在的”价值。答案就是区间\([1,n]\)的最大潜在价值。

可以得到:

\[dp[l][r]=\max_{i⊆[l,r-1]} \max (dp[l][i]+pre[i+1][r],pre[l][i]+dp[i+1][r])
\]

翻译成人话就是,一个区间的潜在价值,等于从左边删去一些数或者从右边删去一些数后再加上删去的数的价值的较大值。

知道了状态转移方程,代码就非常好写了。

AC Code:

#include <bits/stdc++.h> //赞美万能头!
using namespace std;
#define MAXN 105
int n,a[MAXN],dp[MAXN][MAXN],pre[MAXN][MAXN];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
pre[i][i]=dp[i][i]=a[i];//因为题目中的特殊约定“如果只去掉一个数,操作价值为这个数的值。”
}
for(int len=2;len<=n;len++){
for(int l=1;l<=n-len+1;l++){
int r=l+len-1;
pre[l][r]=dp[l][r]=abs(a[l]-a[r])*(r-l+1);//预处理,因为有可能最优方案是把区间[l,r]都删掉,所以要给dp[l][r]也赋值。
}
}
for(int len=2;len<=n;len++){
for(int l=1;l<=n-len+1;l++){
int r=l+len-1;
for(int i=l;i<=r-1;i++){
dp[l][r]=max(dp[l][r],dp[l][i]+pre[i+1][r]);
dp[l][r]=max(dp[l][r],pre[l][i]+dp[i+1][r]);//就是状态转移方程233
}
}
}
printf("%d\n",dp[1][n]);//输出总的“潜在价值”。
return 0;
}

由于LZ非常菜,有可能有自以为是的地方,所以请在评论区无情的指出qwq

最新文章

  1. 关于一个parent(),siblings()的小问题
  2. window.location 结构
  3. MVC认知路【点点滴滴支离破碎】【一】----新建数据库
  4. 删除ibus之后导致系统设置进不了
  5. MyEclipse背景色不伤眼+字体大小调节+代码格式化不换行
  6. CodeWars题目筛选
  7. PHP PhantomJs中文文档(翻译)
  8. redis学习大全
  9. 《service》-“linux命令五分钟系列”之二
  10. poj 2117 Electricity
  11. thecorner.com.cn - Customer Care
  12. 模式识别与机器学习—bagging与boosting
  13. gitlab勾住rocket chat
  14. Python核心编程
  15. cnblogs 支持 iframe 标签 !
  16. [Linux]安装pyenv
  17. windows7安装dlib过程中遇到的问题总结以及运行实例效果
  18. Appium日志乱码终结指北
  19. Spring下redis的配置
  20. mvc Filters 过滤器

热门文章

  1. PHP soundex() 函数
  2. 关于ORACLE索引的几种扫描方式
  3. JS——变量提升和函数提升
  4. phpredis 扩展之操作 Redis,记下来记下来!
  5. windows 下部署 .netcore 到 docker
  6. Linux学习笔记之linux软件包安装以及源的替换
  7. CSRF 学习笔记
  8. CSS 学习第二天
  9. Hexo博客中插入 Chart 动态图表
  10. 为什么要写博客(jekyll迁移)