题面
Bessie喜欢在手机上下游戏玩(……),然而她蹄子太大,很难在小小的手机屏幕上面操作。
她被她最近玩的一款游戏迷住了,游戏一开始有n个正整数,(2<=n<=262144),范围在1-40。在一步中,贝西可以选相邻的两个相同的数,然后合并成一个比原来的大一的数(例如两个7合并成一个8),目标是使得最大的数最大,请帮助Bessie来求最大值。
分析
本题水。
DP方程为:\(f[i][j]=f[i-1][f[i-1][j]]\) 注意特判 \(0\) 。
然后边界条件为 \(f[A_i][i]=i+1\)。
代码
#include <bits/stdc++.h>
using namespace std;
int n;
int result;
int f[61][262150];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int tmp;
cin>>tmp;
f[tmp][i]=i+1;
}
for(int i=2;i<=60;i++){
for(int j=1;j<=n;j++){
if(!f[i][j]){
f[i][j]=f[i-1][f[i-1][j]]; // jianzhi
}
if(f[i][j]){
result=i;
}
}
}
cout<<result<<endl;
return 0;
}