USACO 2016 US Open Contest Gold T3: 248

Posted li-dox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USACO 2016 US Open Contest Gold T3: 248相关的知识,希望对你有一定的参考价值。

题目大意

给定一个1*n(2N248)的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。

题目分析

观察数据范围与题目,n<=248 并且 “每次可以合并相邻两个” ,不难想到要使用区间DP。

令 f[i][j] 表示区间 i~j 合并的最大值,则显然,转移为 (i < k < j )若f[i][k]==f[k+1][j] 则 f[i][j]=max(f[i][k]+1,f[i][j])。dp过程中取max即为答案。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int MAXN=255;
 5 int n,ans;
 6 int f[MAXN][MAXN];
 7 int main()
 8     scanf("%d",&n);
 9     for(int i=1;i<=n;++i)
10         scanf("%d",&f[i][i]);
11         ans=max(ans,f[i][i]);
12     
13     for(int i=n-1;i>=1;--i)
14         for(int j=i+1;j<=n;++j)
15             for(int k=i;k<j;++k)
16                 if(f[i][k]==f[k+1][j])
17                     f[i][j]=max(f[i][j],f[i][k]+1);
18                 ans=max(ans,f[i][j]);
19             
20     printf("%d\n",ans);
21     return 0;
22 

 

以上是关于USACO 2016 US Open Contest Gold T3: 248的主要内容,如果未能解决你的问题,请参考以下文章

USACO 2016 US Open Contest Gold T3: 248

usaco 2017 US Open

USACO 2014 US Open, Silver Problem 2. Dueling GPSs

「USACO 2021 US Open Platinum」Balanced Subsets

USACO 2014 US Open Odometer /// 数位DP

USACO 2014 US Open Fair Photography /// 技巧