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\),同时记录一下转移位置,每次向前找前一个指针就可以了.
复杂度 \(O(nm)\)
Code
/**************************************************************
Problem: 4576
User: BeiYu
Language: C++
Result: Accepted
Time:1208 ms
Memory:79368 kb
****************************************************************/ #include <cstdio>
#include <iostream>
using namespace std; const int N = 263005;
const int M = 60; int n,ans,a[N];
bool f[N][M];int g[N][M]; inline int in(int x=0){ scanf("%d",&x);return x; }
int main(){
n=in();
for(int i=1;i<=n;i++) a[i]=in();
for(int i=1,p;i<=n;i++){
p=i-1,f[i][a[i]]=1,g[i][a[i]]=i;
ans=max(ans,a[i]);
for(int j=a[i];j<M;j++){
if(f[p][j]) f[i][j+1]=1,g[i][j+1]=g[p][j],p=g[p][j]-1,ans=max(ans,j+1);
else break;
}
}
// for(int i=1;i<=n;i++) for(int j=1;j<6;j++) cout<<i<<" "<<j<<" "<<f[i][j]<<" "<<g[i][j]<<endl;
cout<<ans<<endl;
return 0;
}
BZOJ 4576: [Usaco2016 Open]262144的更多相关文章
- BZOJ 4742: [Usaco2016 Dec]Team Building
4742: [Usaco2016 Dec]Team Building Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 21 Solved: 16[Su ...
- bzoj4576 [Usaco2016 Open]262144
题目大意: 给出n个数a[1..n],n<=262144,a[i]<=40,相邻且相同的数可以合并成一个并将值加1,问能获得的最大数是多少 用一个双向链表维护原数列,每个节点记录此节点对应 ...
- bzoj 4506: [Usaco2016 Jan]Fort Moo
4506: [Usaco2016 Jan]Fort Moo Description Bessie is building a fort with her friend Elsie. Like any ...
- bzoj 4412: [Usaco2016 Feb]Circular Barn
4412: [Usaco2016 Feb]Circular Barn Description 有一个N个点的环,相邻两个点距离是1.点顺时针标号为1..N.每一个点有ci头牛,保证∑ci=N.每头牛都 ...
- Bzoj 4582 [Usaco2016 Open] Diamond Collector 题解
4582: [Usaco2016 Open]Diamond Collector Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 204 Solved: ...
- BZOJ 4582: [Usaco2016 Open]Diamond Collector
Descrirption 给你一个长度为 \(n\) 的序列,求将它分成两个序列后最多个数,每个序列最大值最小值不能超过 \(k\) Sol 二分+DP. 排一下序,找出以这个点结尾和开始的位置. 这 ...
- BZOJ 4581: [Usaco2016 Open]Field Reduction
Description 有 \(n\) 个点,删掉三个点后,求最小能围住的面积. Sol 搜索. 找出 左边/右边/上边/下边 的几个点枚举就可以了. 我找了 12 个点,统计一下坐标的个数,然后找到 ...
- BZOJ 4580: [Usaco2016 Open]248
Description 一个序列,每次可以把相邻的两个数合为一个,价值+1,求最后的最大价值. Sol 区间DP. \(f[i][j]\) 表示 \(i-j\) 中合成一个数字为多少,转移就是枚举断点 ...
- BZOJ 4579: [Usaco2016 Open]Closing the Farm
Description 依次删去一个点和它的边,问当前图是否连通. Sol 并查集. 倒着做就可以了. 每次将一个点及其的边加入,如果当前集合个数大于 1,那么就不连通. Code /******** ...
随机推荐
- shell脚本仅列出当前目录下的文件及文件夹
#!/bin/bash function ergodic(){ ` # do # "/"$file ] # then # ergodic $"/"$file # ...
- Spring源码分析——BeanFactory体系之接口详细分析
Spring的BeanFactory的继承体系堪称经典.这是众所周知的!作为Java程序员,不能错过! 前面的博文分析了Spring的Resource资源类Resouce.今天开始分析Spring的I ...
- SqlMetal.exe ORM代码生成
作甚? 先说说这个工具是干啥的,我们所做的程序,或多或少需要存储一些数据到数据库,当然直接使用Sql语句也可以,甚至有些情况下就是要使用sql语句,但对于一些基本的增删改查,对每张表都要写查询语句就显 ...
- vs2015 安装之后安装MSSM 2016 导致 vs启动报错 System.ArgumentException 已添加了具有相同键的项,ActivityLog.xml
如题,先是装了vs2015,开发什么的都没有问题,后来安装了SqlServer2016 MSSM,出大问题了,vs2015打开就报错,具体错误如上,还想还有个ActivityLog.xml 这个文件的 ...
- 《JavaScript高级程序设计》 - 读书笔记 - 第5章 引用类型
5.1 Object 类型 对象是引用类型的实例.引用类型是一种数据结构,用于将数据和功能组织在一起. 新对象是使用new操作符后跟一个构造函数来创建的.构造函数本身就是一个函数,只不过该函数是出于创 ...
- 谈谈duilib
据我所知,duilib已经不再维护了,q群也不再对外开放了. 尽管不再更新,但duilib的学习价值还是很好的.当有一定基础后再扩展duilib的功能,或根据duilib学习到的知识去着手写自己的界面 ...
- RecyclerView的使用(三)
上个小结中介绍了如何使用RecyclerView显示不同的数据展示样式(瀑布流也是可以显示的,从GridView改就好) 本节来为RecyclerView的item添加监听事件. RecyclerVi ...
- php 字符串和数字比较一些问题
本文章来给大家介绍关于php 字符串和数字比较一些问题,因为数字与字符在php中是不同的数据类型,所以在比较时可能会有很多的问题. ,1,2等等,其中0标示成功,其他表示不同的错误代码.程序通过 if ...
- url参数中带有+号,服务器端解码之后没了
解决办法: 客户端:encodeURIComponent 服务器端:Uri.UnescapeDataString 参考网址:http://www.cnblogs.com/artwl/archive/2 ...
- onmousewheel跟onscroll的区别
研习DOM中的事件方法,发现一些细微差别,百度一下没有类似的解答,随手记下来. onmousewheel事件 以下摘自http://help.dottoro.com/ljmracjb.php Bro ...