P3147 [USACO16OPEN]262144

题目描述

Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves.

She is particularly intrigued by the current game she is playing.The game starts with a sequence of N positive integers ( \(2≤N≤262,144\) ), each in the range \(1…40\). In one move, Bessiecan take two adjacent numbers with equal values and replace them asingle number of value one greater (e.g., she might replace twoadjacent 7s with an 8). The goal is to maximize the value of thelargest number present in the sequence at the end of the game. Pleasehelp Bessie score as highly as possible!

Bessie喜欢在手机上下游戏玩(……),然而她蹄子太大,很难在小小的手机屏幕上面操作。

她被她最近玩的一款游戏迷住了,游戏一开始有n个正整数,(2<=n<=262144),范围在1-40。在一步中,贝西可以选相邻的两个相同的数,然后合并成一个比原来的大一的数(例如两个7合并成一个8),目标是使得最大的数最大,请帮助Bessie来求最大值。

输入输出格式

输入格式:

The first line of input contains N, and the next N lines give the sequence

of N numbers at the start of the game.

输出格式:

Please output the largest integer Bessie can generate.

输入输出样例

输入样例#1: 复制

4

1

1

1

2

输出样例#1: 复制

3

说明

In this example shown here, Bessie first merges the second and third 1s to

obtain the sequence 1 2 2, and then she merges the 2s into a 3. Note that it is

not optimal to join the first two 1s.



简化版:

Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves.

She is particularly intrigued by the current game she is playing.The game starts with a sequence of \(N\)positive integers ( \(2≤N≤248\) ), each in the range \(1…40\) . In one move, Bessie cantake two adjacent numbers with equal values and replace them a singlenumber of value one greater (e.g., she might replace two adjacent 7swith an 8). The goal is to maximize the value of the largest numberpresent in the sequence at the end of the game. Please help Bessiescore as highly as possible!



看着这么小的数据范围,有点不知所措,\(f[i][j]\)表示\(i -j\)这段区间能凑成的最大数字

穷举\(k,i,j\)时转移方程\(f[i][j]=max(f[i][j],(f[i][k]==f[k+1][j])\ \ | \ \ f[i][k]+1)\)

#include<iostream>
#include<stdio.h>

using namespace std;

int i,m,n,j,k,maxx,a[1000001],f[300][300];

int main()
{
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%d",&f[i][i]);
    for(i=n-1;i>=1;i--)
        for(j=i;j<=n;j++)
            for(k=j+1;k<=n;k++)
            {
                if(f[i][j]==f[j+1][k]) f[i][k]=max(f[i][k],f[i][j]+1);
                if(f[i][k]>maxx) maxx=f[i][k];
            }
    printf("%d",maxx);
}


这道题\(n≤262144\) , \(x≤40\) 告诉我们要找一个\(n \cdot x\)的算法就很明显了嘛

\(f[i][k][b]\) ,\(b=1\)时表示第\(i\) 个位置是否是一个能够拼出值\(k\)的右端点,如果是,\(f[i][k][b]\) 存的是左端点的位置。\(b=0\)时则相反

由于右端点为\(x\)区间权值为\(k\)的区间是确定的,所以只要每次枚举每个断点即可

#include<iostream>
#include<cstdio>

using namespace std;

int i,m,n,j,k,a[262166][60][2],b[262166],ans;

int main()
{
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%d",&b[i]),a[i][b[i]][1]=a[i][b[i]][0]=i;
    for(i=1;i<=60;i++)
        for(j=1;j<n;j++)
        {
            if(a[j][i][0] && a[j+1][i][1])
            {
                a[a[j][i][0]][i+1][1]=a[j+1][i][1];
                a[a[j+1][i][1]][i+1][0]=a[j][i][0];
                ans=i+1;
            }
        }
    printf("%d",ans);
}

原文地址:https://www.cnblogs.com/ZUTTER/p/9468292.html

时间: 2024-11-09 05:54:05

P3147 [USACO16OPEN]262144的相关文章

洛谷 P3147 [USACO16OPEN]262144

P3147 [USACO16OPEN]262144 题目描述 Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves. She is particularly intrigued by the current game she is playing.

luogu P3147 [USACO16OPEN]262144

题目描述 Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves. She is particularly intrigued by the current game she is playing.The game starts with a seq

【题解】 P3147 [USACO16OPEN]262144

区间DP,题目十分类似2048的游戏,不过从二维的平面换成了数列 数据范围中 $N <= 2*10^5$ 看来$O(N^2)$肯定是无法通过了,那么设计状态N只能添加到一维上应该是类似于$O(NlogN)$的算法 再观察题目,可以提取三个关键变量,对于某个能合并成一个数的数列中的区间,有它的左边界,右边界和合成的数三个关键变量 那么设计状态就可以设$f(i,k)$表示右边界,以$i$为左边界,$k$为合成的数易得到$f(i,k+1)=f(f(i,k)+1,k)$ 枚举$k$直到最大值就完事了,$

luoguP3147 [USACO16OPEN]262144

这里有一种非常鬼畜的\(dp\)方法. 令\(dp[i][j]\)表示区间的最大值为$ i \(,区间的起始点为\) j $的区间长度. \[ \therefore dp[i][j]=dp[i-1][j]+dp[i-1][j+dp[i-1][j]] \] 当然前提是\(dp[i-1][j]\)和\(dp[i-1][j+dp[i-1][j]]\)能够取到. 答案是能够取到的\(dp[I][J]\)中\(I\)的最大值. 如何想到的呢?其实这是一个套路. 如果将\(dp[i][j]\)设为区间起始点

BZOJ 4576: [Usaco2016 Open]262144

Description 一个序列,每次可以将两个相同的数合成一个数,价值+1,求最后最大价值 \(n \leqslant 262144\) Sol DP. 这道题是 BZOJ 4580: [Usaco2016 Open]248 加强版. 做248的那个区间DP其实很多方案都是0,而且一个区间中只有一个合法的数字. 然后就是 一个区间合成一个数的方案的这个数字是固定的. \(f[i][j]\) 表示以 \(i\) 结尾是否能合成 \(j\),同时记录一下转移位置,每次向前找前一个指针就可以了. 复

bzoj4576【Usaco2016 Open】262144

4576: [Usaco2016 Open]262144 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 97  Solved: 73 [Submit][Status][Discuss] Description Bessie likes downloading games to play on her cell phone, even though she does find the small touch screen rather cumbe

bzoj4576 [Usaco2016 Open]262144

题目大意: 给出n个数a[1..n],n<=262144,a[i]<=40,相邻且相同的数可以合并成一个并将值加1,问能获得的最大数是多少 用一个双向链表维护原数列,每个节点记录此节点对应的数值和数的个数,合并相邻且对应数值相同的节点 每次选一个数值最小的点处理,此时两侧的数都更大 若这个点只有一个数则直接删去并断开两侧,此时两侧的数不可能再互相合并 若这个点有偶数个数则数值+1,个数/2,检测能否和两侧合并 若这个点有奇数个数,两侧的数也不可能再互相合并了,因此将这个点分裂成两个互不相连的点

洛谷 P3146 [USACO16OPEN]248

P3146 [USACO16OPEN]248 题目描述 Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves. She is particularly intrigued by the current game she is playing.The

洛谷P3145 [USACO16OPEN]分割田地Splitting the Field

P3145 [USACO16OPEN]分割田地Splitting the Field 题目描述 Farmer John's NN cows (3 \leq N \leq 50,0003≤N≤50,000) are all located at distinct positions in his two-dimensional field. FJ wants to enclose all of the cows with a rectangular fence whose sides are pa