4580: [Usaco2016 Open]248

来源:互联网 发布:安卓手机编程软件 编辑:程序博客网 时间:2024/05/22 03:28

题目链接

题目大意:1*n个格子,玩2048,求得到的最大数

题解:f[i][j]表示以i结尾,合成j的开头位置,倍增一下

我的收获:~~

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<cmath>#include<algorithm>#include<iomanip>#include<vector>#include<map>#include<set>#include<bitset>#include<queue>#include<stack>using namespace std;#define MAXN 300010#define MAXM 1010#define INF 1000000000#define MOD 1000000007#define eps 1e-8#define ll long longint a[MAXN][61];int n;int main(){    int i,j,x,y;    scanf("%d",&n);    int ans=0;    for(i=1;i<=n;i++){        scanf("%d",&x);        a[i][x]=i;        j=i-1;        while(a[j][x]){            j=a[j][x]-1;            a[i][++x]=j+1;        }        ans=max(ans,x);    }    printf("%d",ans);    return 0;}