USACO 2016 US Open Contest 262144 (bzoj4576)

262144 (262144)

Description

Bessie喜欢在她的手机上下载游戏玩,尽管她发现她的大蹄使用小触摸屏幕相当麻烦。她特别感兴趣的是她正在玩

的游戏。 游戏从一个有N个正整数的序列开始(2≤N≤262,144),每个数字在1...40的范围内。 在一个步骤中,

Bessie可以获取具有相等值的两个相邻数字,并且用比这两个数大一的值替换这两个数值(例如,她可以用8替换

两个相邻的7)。目标是在游戏结束时最大化在序列中存在的最大数字的值。 请帮助Bessie得分尽可能高!

题目大意:

给定一个长度为n(n<=2^18)的序列,初始元素值为1到40之间的整数,每次操作可以将两个相邻的并且大小相同

的正整数替换成一个比原数大一的正整数。要求最大化最终数列中的最大值。


dp f[i][j]表示以j为左端合成i的右端点位置。转移即可。

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <queue>
 6 #include <vector>
 7 using namespace std;
 8 const int maxn=3e5+10;
 9 int n,ans;
10 int f[60][maxn];
11 template <class T> void read(T&x)
12 {
13   x=0;char c=getchar();int f=0;
14   while(c<‘0‘||c>‘9‘){f|=(c==‘-‘);c=getchar();}
15   while(c>=‘0‘&&c<=‘9‘)x=(x<<3)+(x<<1)+(c^48),c=getchar();
16   x=f?-x:x;
17 }
18 int main()
19 {
20   read(n);int a;
21   for(int i=1;i<=n;i++){read(a);f[a][i]=i+1;}
22   for(int i=2;i<=58;i++)
23    for(int j=1;j<=n;j++)
24    {
25         if(!f[i][j])f[i][j]=f[i-1][f[i-1][j]];
26      if(f[i][j])ans=max(i,ans);
27    }
28   printf("%d",ans);
29   return 0;
30 } 

原文地址:https://www.cnblogs.com/new-hand/p/9304315.html

时间: 2024-11-09 04:25:14

USACO 2016 US Open Contest 262144 (bzoj4576)的相关文章

USACO 2016 US Open Contest Gold T3: 248

题目大意 给定一个1*n(2≤N≤248)的地图,在里面玩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])

hdu 5775 Bubble Sort(2016 Multi-University Training Contest 4——树状数组)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5775 Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 636    Accepted Submission(s): 378 Problem Description P is a permutation of the

hdu 5802 Windows 10(2016 Multi-University Training Contest 6——贪心+dfs)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5802 Windows 10 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1005    Accepted Submission(s): 333 Problem Description Long long ago, there was a

hdu 5792 World is Exploding(2016 Multi-University Training Contest 5——树状数组)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5792 World is Exploding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 643    Accepted Submission(s): 306 Problem Description Given a sequence A

hdu 5821 Ball(2016 Multi-University Training Contest 8——贪心+排序)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5821 Ball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 515    Accepted Submission(s): 309 Problem Description ZZX has a sequence of boxes numbe

hdu 5774 Where Amazing Happens(2016 Multi-University Training Contest 4——打表)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5774 Where Amazing Happens Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 443    Accepted Submission(s): 300 Problem Description As the premier m

USACO 2016 December Contest Gold T1: Moocast

题目大意 FJ的N头牛(1≤N≤1000)为了在他们之间传播信息, 想要组织一个"哞哞广播"系统. 奶牛们决定去用步话机装备自己而不是在很远的距离之外互相哞哞叫, 所以每一头奶牛都必须有一个步话机. 这些步话机都有一个限制传播半径, 但是奶牛们可以间接地通过中间奶牛传播信息, 所以并不是每头牛都必须直接向其他每一头奶牛连边. 奶牛们需要去决定多少钱花在步话机上, 如果他们花了$X, 那么他们都将会得到sqrt(x)距离的步话机. 所以, 两头牛之间的欧几里得距离平方最多是X. 请帮助奶

USACO 2016 December Contest Gold T3: Lasers and Mirrors

题目大意 出于某种原因,农夫约翰的牛总是在举行激光表演. 对于他们的最新展会,奶牛已经购买了一个大功率的激光器 - 这么大,事实上,他们似乎不能轻易地从它交付的位置移动.他们想以某种方式将激光的光发送到FJ物业另一侧的谷仓.激光器和谷仓都可以被认为位于FJ农场的地图上的2D平面中的点上.牛计划指挥激光器,使得它发出水平或竖直(即,与x或y轴平行)的光束.他们会将这个光束从一些镜子反射回去,直接到谷仓. 在农场上有N个栅栏(1≤N≤100,000),位于不同的二维点(也不同于激光和谷仓),牛可以安

2016 Multi-University Training Contest 1 H.Shell Necklace

Shell Necklace Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 534    Accepted Submission(s): 227 Problem Description Perhaps the sea‘s definition of a shell is the pearl. However, in my view,