[NOIP 2024 模拟3]变幻
[NOIP 2024 模拟3]变幻
题意
给出长度为
每次修改可以把一个数变得更小。求序列中山谷数之和的最大值。
思路
动态规划,定义
因为连续两个点只可能有一个成为山谷数,所以
转移方程:
- 继承
。 - 当前数为山谷数
。 - 当前数不为山谷数
从
答案为
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 2e3 + 5;
int n, k, a[N];
ll dp[N][N], ans;
bool yes(int x) {
if (x == 1 || x == n) {
return 0;
}
return a[x] < a[x + 1] && a[x] < a[x - 1];
}
int main() {
freopen("A.in", "r", stdin);
freopen("A.out", "w", stdout);
cin >> n >> k;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
for (int i = 2; i < n; i ++) {
for (int j = 0; j <= k; j ++) {
dp[i][j] = dp[i - 1][j];
if (yes(i)) {
dp[i][j] = max(dp[i][j], dp[i - 2][j] + a[i]);
}
if (j) {
dp[i][j] = max(dp[i][j], dp[i - 2][j - 1] + min({a[i - 1], a[i + 1], a[i]}) - 1);
}
}
}
for (int i = 0; i <= k; i ++) {
ans = max(ans, dp[n - 1][i]);
}
cout << ans << "\n";
return 0;
}
本文来自博客园,作者:maniubi,转载请注明原文链接:https://www.cnblogs.com/maniubi/p/18434324,orz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】