好神奇的DP
題意 給定一個1*n的地圖,在裏面玩2048,每次可以合併相鄰兩個相同的 例如將x,x合成爲x+1
設f[i][x]表示由i結尾 合成x 的開頭在哪裏
轉移很好想
#include<bits/stdc++.h>
#define N 300010
using namespace std;
int n,ans,f[N][61];
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main(){
n=read();
for(int i=1,j,x;i<=n;i++){
x=read();
f[i][x]=i;
j=i-1;
while(f[j][x]){
j=f[j][x++]-1;
f[i][x]=j+1;
}
ans=max(ans,x);
}
printf("%d\n",ans);
}