BZOJ4580 DP

来源:互联网 发布:淘宝直播账号出租平台 编辑:程序博客网 时间:2024/06/05 05:21

好神奇的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);  }  
原创粉丝点击