首页 > 其他分享 >2024/09/25 模拟赛总结

2024/09/25 模拟赛总结

时间:2024-09-26 21:52:53浏览次数:1  
标签:25 山谷 int max 09 kMaxN 2024 long dp

rk5,\(100+40+5+0=145\)。T2 上物理课把式子推出来了,感谢孟德的馈赠

#A. 变换

简单 dp,为什么都写 \(3\) 维啊

令 \(dp_{i,j,0/1,0/1}\) 为考虑前 \(i\) 位改了 \(j\) 位,当前是/不是“山谷”,前一位是/不是“山谷”

显然,相邻两位一定不会都是山谷,所以 \(dp_{i,j,1,1}\) 一定不存在

考虑转移。对于 \(dp_{i,j,0,0}\),只要上一位不是“山谷”即可,即 \(dp_{i,j,0,0}=\max\{dp_{i-1,j,0,0},dp_{i-1,j,0,1}\}\)

对于 \(dp_{i,j,0,1}\),上一位的上一位一定不为“山谷”,所以 \(dp_{i,j,0,1}=dp_{i-1,j,1,0}\)

对于 \(dp_{i,j,1,0}\),需要分类讨论。若第 \(i\) 本来就是“山谷”,则 \(dp_{i,j,1,0}=a_i+\max\{dp_{i-1,j,0,0},dp_{i-1,j,0,1}\}\);否则 \(dp_{i,j,1,0}=\min\{a_{i-1},a_{i+1}\}-1+\max\{dp_{i-1,j-1,0,0},dp_{i-1,j-1,0,1}\}\)

最终答案为 \(\max\{dp_{n,i,0,0/1}\}\)

// BLuemoon_
#include <bits/stdc++.h>

using namespace std;
using LL = long long;

const int kMaxN = 2e3 + 5;

int n, k, tot;
LL ans, a[kMaxN], f[kMaxN][kMaxN][2][2];

int main() {
  freopen("change.in", "r", stdin), freopen("change.out", "w", stdout);
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (int i = 2; i < n; i++) {
    if (a[i] < a[i + 1] && a[i] < a[i - 1]) {
      for (int j = 0; j <= min(i, k); j++) {
        f[i][j][1][0] = max({f[i - 1][j][0][0], f[i - 1][j][0][1]}) + a[i];
        f[i][j][0][1] = f[i - 1][j][1][0];
        f[i][j][0][0] = max({f[i - 1][j][0][0], f[i - 1][j][0][1]});
      }
    } else {
      for (int j = 0; j <= min(i, k); j++) {
        f[i][j][0][0] = max({f[i - 1][j][0][0], f[i - 1][j][0][1]});
        f[i][j][0][1] = f[i - 1][j][1][0];
        j && (f[i][j][1][0] = max({f[i - 1][j - 1][0][1], f[i - 1][j - 1][0][0]}) + min(a[i - 1], a[i + 1]) - 1);
      }
    }
  }
  for (int j = 0; j <= k; j++) {
    f[n][j][0][0] = max({f[n - 1][j][0][0], f[n - 1][j][0][1]});
    f[n][j][0][1] = max({f[n - 1][j][1][0], f[n - 1][j][1][0]});
  }
  for (int i = 0; i <= k; i++) {
    ans = max({ans, f[n][i][0][0], f[n][i][0][1]});
  }
  cout << ans << '\n';
  return 0;
}

标签:25,山谷,int,max,09,kMaxN,2024,long,dp
From: https://www.cnblogs.com/bluemoon-blog/p/18434489

相关文章

  • 【2024计算机毕业设计】基于jsp+mysql的JSP在线水果超市商城
    运行环境:最好是javajdk1.8,我在这个平台上运行的。其他版本理论上也可以。IDE环境:Eclipse,Myeclipse,IDEA或者SpringToolSuite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本tomcat服务器环境:Tomcat7.x,8.x,9.x版本均可操作系统环境:WindowsXP/7......
  • 2024 CCPC网络赛复盘
    补题链接:https://codeforces.com/gym/105336名次:103赛时:BCDEGIJKL(9题)赛后:F首先是OMS与PTA的保留节目:爆炸去年是新版OMS闪退,今年是直接塞爆进不去。教室一片骚动,不过既然比赛已经开始了,那就可以动键盘,先敲几个板子再说。我上来先敲最黑盒的网络流,小武过来敲了个fhq......
  • 【Py/Java/C++三种语言OD独家2024E卷真题】20天拿下华为OD笔试之【哈希表】2024E-选修
    可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入输出示例一输入输出说明示例二输入输出说明解题思路代码pythonjavacpp时空复......
  • 【Py/Java/C++三种语言OD独家2024E卷真题】20天拿下华为OD笔试之【DFS/BFS】2024E-开
    可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入输出示例一输入输出说明示例二输入输出解题思路代码解法一:BFSpythonjavacpp......
  • 2024/9/26
    publicclassTestDouble{publicstaticvoidmain(Stringargs[]){System.out.println("0.05+0.01="+(0.05+0.01));System.out.println("1.0-0.42="+(1.0-0.42));System.out.println("4.015*100="+(4......
  • BOI 2024 Day1
    LuoguP10759题目描述你有\(N\)个一次性的工作,完成第\(i\)个工作可以获得\(x_i\)的利润(可能为负)。有些工作依赖于其他工作,第\(i\)个工作必须在第\(p_i\)个工作完成之后进行。若\(p_i=0\),则\(i\)没有依赖。你初始有\(S\)元,求你最多能获得多少元。思路在一个点......
  • 如何打造Java SpringBoot民宿山庄农家乐系统?2025最新毕业设计攻略
    ✍✍计算机毕业编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • 2024.9.26 ThreadLocal
    在使用ThreadLocal的情况下,并发量很高时不会产生冲突,原因如下:1.线程隔离:ThreadLocal为每个线程提供独立的存储空间。每个线程都可以安全地设置和获取其自己的变量值,而不会影响其他线程。即使在高并发环境下,线程间的数据是隔离的。2.并发安全:ThreadLocal本身是线程安......
  • 9.25每日总结 OpenFeign
    OpenFeign利用Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。但是远程调用的代码太复杂了:而且这种调用方式,与原本的本地方法调用差异太大,编程时的体验也不统一,一会儿远程调用,一会儿本地调用。用到OpenFeign组件了。其实远程调用的关键点就在于四个:请求方式......
  • [2027届]NOIP2024模拟赛#6
    全真模拟赛。1:30开考。看了T1,发现\(O(m\logn)\)的暴力很好写,直接50pts到手。然后发现每次不用一个一个改,而且改完以后可以直接区间改,但是一直没有找到合适的东西维护复杂度。往下翻了翻数据发现\(2\)的整次幂这个性质很好写,但是写挂了。此时时间已经过去了1.5h,于是......