题解:Luogu_P3147 [USACO16OPEN] 262144 P
题解:Luogu_P3147 [USACO16OPEN] 262144 P
Solution
考虑这种合并区间的问题使用区间 DP,但
注意到能合并出的数最多为 58(
状态:
边界:
转移:
Code
//P3147
#include <iostream>
#include <cstdio>
using namespace std;
int read()
{
int val = 0;
bool si = 0;
char ch = getchar();
for (; !isdigit(ch); ch = getchar())
si ^= ch == '-';
for (; isdigit(ch); ch = getchar())
val = (val << 3) + (val << 1) + (ch ^ 48);
return si ? - val : val;
}
const int N = 262145;
int n, ans, f[N][60];
int main()
{
n = read();
for (int i = 1; i <= n; i ++)
f[i][read()] = i + 1;
for (int j = 2; j <= 58; j ++)
for (int i = 1; i <= n; i ++)
{
if (f[i][j] == 0)
f[i][j] = f[f[i][j - 1]][j - 1];
if (f[i][j] != 0)
ans = j;
}
printf("%d\n", ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】