diff --git a/P3146.cpp b/P3146.cpp new file mode 100644 index 0000000..42d4ad5 --- /dev/null +++ b/P3146.cpp @@ -0,0 +1,27 @@ +#include +#define int long long +using namespace std; +int n; +int a[250]; +int f[250][250]; // l, r +signed main() { + int ans = 0; + scanf("%lld", &n); + for (int i = 1; i <= n; ++i) { + scanf("%lld", &a[i]); + f[i][i] = a[i]; + ans = max(ans, a[i]); + } + for (int len = 2; len <= n; ++len) { + for (int end = len; end <= n; ++end) { + int begin = end - len + 1; + for (int i = begin; i <= end; i++) { + if (f[begin][i] == f[i + 1][end] && f[begin][i] != 0) + f[begin][end] = max(f[begin][end], f[begin][i] + 1); + } + ans = max(ans, f[begin][end]); + } + } + printf("%lld\n", ans); + return 0; +} \ No newline at end of file diff --git a/P3146.md b/P3146.md new file mode 100644 index 0000000..40d4925 --- /dev/null +++ b/P3146.md @@ -0,0 +1,37 @@ +# P3146 [USACO16OPEN] 248 G + +## 题目描述 + +奶牛贝茜喜欢在手机上下载游戏来玩,尽管她确实觉得对于自己巨大的蹄子来说,小小的触摸屏用起来相当笨拙。 + +她对当前正在玩的这个游戏特别感兴趣。游戏开始时给定一个包含 $N$ 个正整数的序列($2 \leq N \leq 248$),每个数的范围在 $1 \ldots 40$ 之间。在一次操作中,贝西可以选择两个相邻且相等的数,将它们替换为一个比原数大 $1$ 的数(例如,她可以将两个相邻的 `7` 替换为一个 `8`)。游戏的目标是最大化最终序列中的最大数值。请帮助贝西获得尽可能高的分数! + +## 输入格式 + +第一行输入包含 $N$,接下来的 $N$ 行给出游戏开始时序列的 $N$ 个数字。 + +## 输出格式 + +请输出贝西能生成的最大整数。 + +## 输入输出样例 #1 + +### 输入 #1 + +``` +4 +1 +1 +1 +2 +``` + +### 输出 #1 + +``` +3 +``` + +## 说明/提示 + +在示例中,贝西首先合并第二个和第三个 `1`,得到序列 `1 2 2`,然后将两个 `2` 合并为 `3`。注意,合并前两个 `1` 并不是最优策略。 \ No newline at end of file