当前位置: 首页 > news >正文

【双指针优化DP】The 2022 Hangzhou Normal U Summer Trials H

Problem - H - Codeforces

题意:

 

思路:

首先很明显是DP

因为只有1e6个站点,因此可以以站点作为阶段

注意到K很小,因此可以尝试把这个当作第二维
设dp[i][j]为到达第i个站点,已经花了j元钱的最小步数

然后就想了一个n^2的做法,枚举两个指针,第i个站点从第p个站点转移,讨论是走过来的还是骑过来的,计算贡献

但是这样n^2肯定超时,因此我们去考虑特殊性质来枚举上一个状态

特殊性质是,K很小,因此考虑去枚举这次花了l元钱到第i个站点

但是这样的话从什么位置转移过来就不知道了,因此需要预处理从位置和花的钱数的关系

Code:

#include <bits/stdc++.h>#define int long longusing namespace std;const int mxn=1e6+10;
const int mxv=1e6+10;
const int mod=1e9+7;int N,P,S,K;
int a[mxn],dp[mxn][6],lx[6];void solve(){cin>>N>>P>>S;for(int i=1;i<=N;i++) cin>>a[i];cin>>K;memset(dp,0x3f,sizeof(dp));for(int i=0;i<=K;i++) dp[1][i]=a[1],lx[i]=1,dp[0][i]=0;for(int i=1;i<=N;i++){for(int j=0;j<=K;j++){while(a[i]-a[lx[j]]>j*S) lx[j]++;dp[i][j]=dp[i-1][j]+a[i]-a[i-1];for(int l=1;l<=j;l++){dp[i][j]=min(dp[i][j],dp[lx[l]][j-l]);} }}int ans=1e9;for(int i=1;i<=N;i++) ans=min(ans,dp[i][K]+P-a[i]);cout<<ans<<'\n';
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int __=1;//cin>>__;while(__--)solve();return 0;
}

 

http://www.lryc.cn/news/98132.html

相关文章:

  • [论文笔记] LLM数据集——金融数据集
  • 在亚马逊平台,如何有效举报违规行为?
  • 深度学习入门教学——神经网络
  • 阿里Java开发手册~OOP 规约
  • 【Mysql数据库面试01】内连接 左连接 右连接 全连接
  • 事务隔离:为什么你改了我还看不见
  • 吴恩达ChatGPT《LangChain Chat with Your Data》笔记
  • https和http有什么区别
  • 振弦采集仪及在线监测系统完整链条的岩土工程隧道安全监测
  • linux基础学习
  • android 前端常用布局文件升级总结(二)
  • Linux复习——基础知识
  • 【数据结构】实验三:链表
  • 第4集丨webpack 江湖 —— loader的安装和使用
  • 【Lua学习笔记】Lua进阶——协程
  • 亚马逊云科技纽约峰会,充分释放数据价值和生成式AI的潜力
  • 什么是 web3?
  • [驱动开发]字符设备驱动应用——点灯
  • 前端学习——Vue (Day5)
  • Ceph版本
  • cspm是什么?考了有用吗?
  • Java阶段五Day14
  • 【计算机网络】应用层协议 -- 安全的HTTPS协议
  • 小程序通过ip+port+路径获取服务器中的图片
  • Codeforces Round 888 (Div. 3)(A-F)
  • 【人工智能】深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化
  • 失去SSL证书,会对网站安全造成什么影响?
  • gitee中fork了其他仓库,如何在本地进行同步
  • java项目之社区生活超市管理系统(ssm+mysql+jsp)
  • WebGPU(七):C++头部封装