码迷,mamicode.com
首页 > 其他好文 > 详细

USACO 2016 US Open Contest Gold T3: 248

时间:2019-07-20 21:09:12      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:bsp   ==   return   使用   scan   bit   int   多少   mes   

题目大意

给定一个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

标签:bsp   ==   return   使用   scan   bit   int   多少   mes   

原文地址:https://www.cnblogs.com/LI-dox/p/11219112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!