首页 > 其他分享 >P9871 [NOIP2023] 天天爱打卡

P9871 [NOIP2023] 天天爱打卡

时间:2024-03-23 20:34:56浏览次数:23  
标签:limits max 复杂度 P9871 NOIP2023 打卡 线段

P9871 [NOIP2023] 天天爱打卡

经典dp+线段树优化+离散化

前两个步骤略讲,主要是离散化。

首先考虑dp,朴素的,容易写出状态 \(f_i\) 表示考虑到第 \(i\) 个位置,且强制第 \(i\) 天跑步的最大能量值。

考虑枚举最后一段跑步的时间,有

\(f_i=\max(\max\limits_{k<j}f_k-(i-j)\times d+\sum\limits_{j<l_p\le r_p\le i}v_p)\)

不妨设 \(g_i=\max\limits_{j<i}f_i\),再自然的参变分离,有

\(f_i=\max(g_j+j\times d+\sum\limits_{j<l_p\le r_p\le i}v_p)-i\times d\)

容易看出只需要维护前面的最大值即可。考虑线段树优化。对于 \(g_j+j\times d\) 是定值,直接在线段树末尾插入即可。后面的部分可以在枚举的过程中不断把 \(r_p=i\) 的线段加入,也就是线段树上区间加。具体的说,对于每一个 \([l_i,r_i]\),给所有 \(j<l_i\) 加入 \(v_i\),表示若走满 \([j+1,i]\) 可以取到该线段。

这就是前面的部分,复杂度为 \(O(n\log n)\)。

考虑优化。首先数据范围显然想让我们把复杂度降到 \(O(m\log m)\)。于是我们就观察到 \(f\) 序列会分成很多段。

这些线段的左右端点把整个序列分为多段,观察每一段的决策,对于 \([l,r]\) 段,一定只有都跑和都不跑两种情况。考虑选每段的右端点作为该段的代表元。于是对于每个线段,我们只保留 \(l_i-1\) 与 \(r_i\) 两个端点即可,离散化完之后转移同样。

复杂度 \(O(m\log m)\)。

标签:limits,max,复杂度,P9871,NOIP2023,打卡,线段
From: https://www.cnblogs.com/FireRaku/p/18091633

相关文章

  • 算法打卡day25|回溯法篇05|Leetcode 491.递增子序列、46.全排列、47.全排列 II
     算法题Leetcode491.递增子序列题目链接:491.递增子序列大佬视频讲解:递增子序列视频讲解 个人思路和昨天的子集2有点像,但昨天的题是通过排序,再加一个标记数组来达到去重的目的。而本题求自增子序列,是不能对原数组进行排序的,因为排完序的数组都是自增子序列了。解决......
  • 20240322打卡
    第四周第一天第二天第三天第四天第五天第六天第七天所花时间1h5h3h1.5h0h代码量(行)2123592745470博客量(篇)11111知识点了解Kotlin编写用户注册与登录功能jetpack的深入使用hilt依赖注入与kotlin协程等知识了解蓝桥杯题目练习osu......
  • L2-036 网红点打卡攻略
    没有AC,没有用到每个地点只能打卡一次的限制条件。错误版本:#include<bits/stdc++.h>usingnamespacestd;intedges[210][210],fangan[2000][2000];intminspend=INT_MAX;intidx=0;intmain(){ intn,m; cin>>n>>m; for(inti=0;i<m;i++){ inta......
  • 20240321打卡
    第四周第一天第二天第三天第四天第五天第六天第七天所花时间1h5h3h1.5h代码量(行)212359274547博客量(篇)1111知识点了解Kotlin编写用户注册与登录功能jetpack的深入使用hilt依赖注入与kotlin协程等知识了解蓝桥杯题目练习......
  • 20240320打卡
    第四周第一天第二天第三天第四天第五天第六天第七天所花时间1h5h3h代码量(行)212359274博客量(篇)111知识点了解Kotlin编写用户注册与登录功能jetpack的深入使用hilt依赖注入与kotlin协程等知识了解JetpckDagger-Hilt依赖......
  • python coding with ChatGPT 打卡第23天| 回溯算法:理论基础
    文章目录视频讲解回溯法的效率解决的问题如何理解回溯法回溯框架视频讲解回溯算法理论篇回溯是递归的副产品,只要有递归就会有回溯。回溯法的效率回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法......
  • 3月20每日打卡
    软件体系架构课堂测试–架构分析 阅读下列案例,回答相关问题:某大银行的一位银行卡办公室的收账经理Liz遇到了一个问题。她每周都收到一份过期未付款的账户名单。这份报告已经从两年前的250个账户增加到现在的1250个账户。为了确定那些严重拖欠债务的账户,Liz需要通读这份报告。......
  • 2024 蓝桥打卡Day15
    洛谷刷题P8752[蓝桥杯2021省B2]特殊年份题目[P8752[蓝桥杯2021省B2]特殊年份](https://www.luogu.com.cn/problem/P8752)题解P8780[蓝桥杯2022省B]刷题统计题目[P8780[蓝桥杯2022省B]刷题统计](https://www.luogu.com.cn/problem/P8780)题解P......
  • PTA 打卡 3.18
    7-1新胖子公式#include<bits/stdc++.h>usingnamespacestd;intmain(){floath,w,t;cin>>w;cin>>h;t=w/(h*h);printf("%.1f\n",t);if(t>25.0)cout<<"PANG";elsecout&......
  • 20240318打卡
    第四周第一天第二天第三天第四天第五天第六天第七天所花时间1h代码量(行)212博客量(篇)1知识点了解Kotlin编写用户注册与登录功能......