Luogu-P3205-HNOI2010-合唱队
题目地址
思路
这道题其实是P3146 [USACO16OPEN]248的升级版,但是N的范围很大,为262144。原先的O(N3)的方法自然会TLE,甚至O(N2)的方法也不足以解决。
定义f[i][j]为从左端点j开始,能合并出i的(右端点值+1)的值
首先进行初始化,对于坐标为i点的值t,处理如下:
他的左断点为i,能合并出的值为t,右端点为i,值赋予i+1
为什么是i+1呢?因为我们之后合并两个数的时候,从f[i][j]去搜,可以直接将其作为左端点搜索下一个数。
转移方程为:
\]
为什么?
\(f[i-1][j]\)代表从端点j开始找能合并成i-1的最少距离,并找出右端点的下一个端点。
\(f[i-1][f[i-1][j]]\)就代表从上一个找到的右端点下个端点开始搜索。如果没有搜到,肯定返回时0,就说明没有找到。
所以,如果当\(f[i][j]\)不为0后,这个i就是最大合并的值。
所以我们只要枚举i与j就可以了。
j的范围是n,那i呢?
我们知道,数最大是40,两个40合成一个41,四个40合成一个42,八个40合成一个43,十六个40合成一个44。
假设数都是最大的40,可以得出2^x个数字可以合成最大的值为40+x。
又因为N=262144,而且2^18=262144,所以最大的合成数为40+18=58,我们只要枚举到58就行了。
代码示例
#include<cstdio>
using namespace std;
int f[61][262145],n,x,ans;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&x),f[x][i]=i+1;
for(int i=2;i<=58;i++){
for(int j=1;j<=n;j++){
if(!f[i][j])f[i][j]=f[i-1][f[i-1][j]];
if(f[i][j])ans=i;
}
}
printf("%d",ans);
return 0;
}
PS:当然,把数组开反也是可以的。
Luogu-P3205-HNOI2010-合唱队的更多相关文章
- 洛谷 P3205 [HNOI2010]合唱队 解题报告
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...
- 洛谷——P3205 [HNOI2010]合唱队
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...
- [LUOGU] P3205 [HNOI2010]CHORUS 合唱队
为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<=2000) ...
- P3205 [HNOI2010]合唱队[区间dp]
题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<= ...
- P3205 [HNOI2010]合唱队
题目点这里 题面: 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi ...
- [洛谷P3205] HNOI2010 合唱队
问题描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<= ...
- 洛谷 P3205 [HNOI2010]合唱队
题目链接 题解 区间dp \(f[i][j]\)表示i~j区间最后一次插入的是\(a[i]\) \(g[i][j]\)表示i~j区间最后一次插入的是\(a[j]\) 然后就是普通区间dp转移 Code ...
- Luogu 3205 [HNOI2010]合唱队
初赛滚粗的我含着眼泪写代码…… 设$f_{l, r, 0/1}$表示$[l, r]$的区间的队伍排列好,且最后一个插进去的在左边$(0)$/右边$(1)$的方案数,那么有初态$f_{i, i, 0} ...
- 洛谷 P3205 [HNOI2010]合唱队(区间dp)
传送门 解题思路 观察队形的组成方式可以得出,最后一名加入区间i...j的人要么是在i位置上,要么是在j位置上,所以我们可以用dp[i][j][0]表示区间i...j最后一个加入的人站在i位置上的方案 ...
- [Luogu P3203] [HNOI2010]弹飞绵羊 (LCT维护链的长度)
题面 传送门:洛谷 Solution 这题其实是有类似模型的. 我们先考虑不修改怎么写.考虑这样做:每个点向它跳到的点连一条边,最后肯定会连成一颗以n+1为根的树(我们拿n+1代表被弹出去了).题目所 ...
随机推荐
- gdb调试子进程
gdb默认情况下,父进程fork一个子进程,gdb只会继续调试父进程而不会管子进程的运行. 在一部分系统中(基于2.6内核的CentOS,支持follow-fork和detach-on-fork模式) ...
- Python_爬虫_案例汇总:
1.豆瓣采集 1 #coding:utf-8 2 #采集豆瓣书信息和图片,写进数据库 3 4 from urllib import request 5 # from bs4 import Beauti ...
- 2、Spring Boot配置
1.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoo ...
- ASP.NET Core使用HostingStartup增强启动操作
概念 在ASP.NET Core中我们可以使用一种机制来增强启动时的操作,它就是HostingStartup.如何叫"增强"操作,相信了解过AOP概念的同学应该都非常的熟悉.我们常 ...
- Linux下查询外网IP的办法。
Curl 纯文本格式输出:curl icanhazip.comcurl ifconfig.mecurl curlmyip.comcurl ip.appspot.comcurl ipinfo.io/ip ...
- rkhunter
0 0 * * 0 /usr/local/bin/rkhunter -c --cronjob 定时工具
- Codeforces375D Tree and Queries
dsu on tree 题目链接 点我跳转 题目大意 给定一棵 \(n\) 个节点的树,根节点为 \(1\).每个节点上有一个颜色 \(c_i\) \(m\) 次询问. 每次询问给出 \(u\) \( ...
- 2021版的思维导图MindManager 安装激活以及换机教程
思维导图软件MindManager更新版本啦,相信细心的小伙伴应该已经发现了,MindManager最新版的名称变成了MindManager Windows 21,并且更新了很多新功能,点击查看Min ...
- ABBYY FineReader 15快速转换文档详解
作为一款专业的"PDF编辑器",用户可通过使用ABBYY FineReader 15的"快速转换"功能,将各种格式的一个或多个文件合并PDF文档.Micros ...
- Mac中的格式转换如何用读写工具Tuxera NTFS完成
Tuxera NTFS for Mac是一款专门为Mac用户提供的NTFS驱动软件,它不仅可以进行磁盘文件的访问.编辑.传输和存储,还可以对硬盘进行维修检查以及修复. 今天小编就给大家简单介绍一下Tu ...