abc369D Bonus EXP
有N只怪兽,第i只怪兽的体力为A[i],需要按编号从小到大的顺序依次处理,对于每只怪兽可以选择打或不打,如果不打,经验值不变;如果打,将获得等同于怪兽体力的经验值。另外,对于第偶数次打的怪兽,经验值翻倍。求能获得的最大经验值。
1<=N<=2E5; 1<=A[i]<=1E9
分析:获得的经验跟奇偶性有关,设dp0[i]表示前i只怪兽打了偶数只的答案,dp1[i]表示前i只怪兽打了奇数只的答案。根据打或不打,以及奇偶性进行递推。
#include <bits/stdc++.h> using i64 = long long; void solve() { int N; std::cin >> N; std::vector<int> A(N+1); for (int i = 1; i <= N; i++) { std::cin >> A[i]; } std::vector<i64> dp0(N+1), dp1(N+1); dp0[0] = 0; dp1[0] = -1E18; for (int i = 1; i <= N; i++) { dp0[i] = std::max(dp0[i-1], dp1[i-1] + 2 * A[i]); dp1[i] = std::max(dp1[i-1], dp0[i-1] + A[i]); } std::cout << std::max(dp0[N], dp1[N]) << "\n"; } int main() { std::cin.tie(0)->sync_with_stdio(0); int t = 1; while (t--) solve(); return 0; }
标签:
线性dp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!