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

CF201C

最优的方案应该是先往一个方向走,然后走回来,再往另一个方向走不回来。考虑用 dp 模拟这个过程。设 \(f_{i,0/1}\) 表示从第 \(i\) 个点出发往左走,不一定/一定回到 \(i\) 号点的最大次数,则有转移:

\[\begin{array}{l} f_{i,1}=f_{i-1,1}+a_{i-1}-[2 \nmid a_{i-1}]\\f_{i,0}=\max\left\{ \begin{array}{l} f_{i-1,0}+a_{i-1}-[2 \mid a_{i-1}]\\ f_{i-1,1}+a_{i-1}\\ f_{i,1}\\ \end{array} \right. \end{array} \]

转移的意义分别是:

  • \(i\) 出发,把 \(i-1\) 左边走完以后,不停在 \(i-1\)\(i\) 之间移动,最终在 \(i\) 结束。
  • \(i\) 出发,先在 \(i-1\)\(i\) 之间移动,最终到 \(i-1\),走 \(i-1\) 左边的点。
  • \(i\) 出发,把 \(i-1\) 左边走完以后,不停在 \(i-1\)\(i\) 之间移动,最终在两者任意一个结束。
  • 可以回到 \(i\)

同理维护出向右走的最大次数。时间复杂度 \(O(n)\)

#include<iostream>
#include<cstdio>
#define int long long
#define N 100010
using namespace std;
int n,a[N],f[N][2],g[N][2],ans;
signed main(){cin>>n;for(int i=1;i<n;i++)cin>>a[i];for(int i=2;i<=n;i++){if(a[i-1]>1)f[i][1]=f[i-1][1]+a[i-1]/2*2;f[i][0]=max(f[i][1],max(f[i-1][0]+a[i-1]-(a[i-1]%2^1),f[i-1][1]+a[i-1]));}for(int i=n-1;i>=1;i--){if(a[i]>1)g[i][1]=g[i+1][1]+a[i]/2*2;g[i][0]=max(g[i][1],max(g[i+1][0]+a[i]-(a[i]%2^1),g[i+1][1]+a[i]));}for(int i=1;i<=n;i++){ans=max(ans,f[i][0]+g[i][1]);ans=max(ans,f[i][1]+g[i][0]);}cout<<ans;return 0;
}
http://www.wxhsa.cn/company.asp?id=2202

相关文章:

  • CF1774D
  • CF23C
  • CF37C
  • CF33D
  • 支持类 Unix 语法 ``:Windows 下用 PowerShell 7 优化 npm 和 VS Code
  • 初赛程序阅读做题要点
  • 模拟堆(手写堆 的五大操作)
  • 【A】杂题悬桨
  • 使用Osquery进行远程取证:NTFS取证扩展实战指南
  • 完整教程:简单介绍一下Clickhouse及其引擎
  • 矩阵分解
  • 11
  • 基于 Gitlab 实现 Go 的 CI/CD
  • 2025.9.11
  • 容斥原理
  • 【B】世良真纯
  • 如何使用jobleap.cn避免简历中的严重错误
  • 在 Zustand 中创建通用 Action 的优雅实践
  • 如何用产品思维优化简历的“用户体验”?
  • 简历如何优化,简历如何投递,面试如何准备?
  • 网络流做题笔记
  • 简历优化全攻略:如何写出吸引HR的简历?
  • 重塑云上 AI 应用“运行时”,函数计算进化之路
  • 25.9.12 C语言基本数据类型
  • Avalonia:基础导航
  • bashrc的一些配置记录
  • H5游戏性能优化系列-----协议相关优化
  • 实现我的第一个langchain应用
  • 小说可视化系统设计(程序员副业项目)
  • MyEMS与开源浪潮:如何重塑全球能源管理的未来格局