【BZOJ4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+动态规划
【BZOJ4922】[Lydsy六月月赛]Karp-de-Chant Number
Description
Input
Output
Sample Input
())
((()
)()
Sample Output
HINT
题解:先用栈求出每个串左边有多少多余的右括号l,右边有多少多余的左括号r。那么我们最终的序列一定是先来一些l<r的,再来一些r<l的。用f[i]表示右面还剩i个多余的左括号时,总长度的最大值,转移时显然是背包,但是转移顺序呢?这就是一个经典的贪心模型了。
对于l<r的,显然我们要先选择l更小的,因为这样可以获得更多的左括号来填掉多余的右括号;对于l>r的就反过来想,先选r更大的。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m;
int f[90010];
struct node
{
int l,r,v;
}p[310];
char str[310];
bool cmp(const node &a,const node &b)
{
if((a.r>a.l)!=(b.r>b.l)) return (a.r>a.l)>(b.r>b.l);
if(a.r>a.l) return a.l<b.l;
else return a.r>b.r;
}
int main()
{
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++)
{
scanf("%s",str),p[i].v=strlen(str),m+=p[i].v;
int top=0;
for(j=0;j<p[i].v;j++)
{
if(str[j]==')')
{
if(top) top--;
else p[i].l++;
}
else top++;
}
for(top=0,j=p[i].v-1;j>=0;j--)
{
if(str[j]=='(')
{
if(top) top--;
else p[i].r++;
}
else top++;
}
}
sort(p+1,p+n+1,cmp);
memset(f,0xc0,sizeof(f));
f[0]=0;
for(i=1;i<=n;i++)
{
if(p[i].r>p[i].l)
{
for(j=m;j>=p[i].r;j--) f[j]=max(f[j],f[j+p[i].l-p[i].r]+p[i].v);
}
else for(j=p[i].r;j-p[i].r+p[i].l<=m;j++) f[j]=max(f[j],f[j-p[i].r+p[i].l]+p[i].v);
}
printf("%d",f[0]);
return 0;
}
【BZOJ4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+动态规划的更多相关文章
- 【BZOJ4919】[Lydsy六月月赛]大根堆 线段树合并
[BZOJ4919][Lydsy六月月赛]大根堆 Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切 ...
- [BZOJ4920][Lydsy六月月赛]薄饼切割
[BZOJ4920][Lydsy六月月赛]薄饼切割 试题描述 有一天,tangjz 送给了 quailty 一张薄饼,tangjz 将它放在了水平桌面上,从上面看下去,薄饼形成了一个 \(H \tim ...
- bzoj 4921: [Lydsy六月月赛]互质序列
4921: [Lydsy六月月赛]互质序列 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 188 Solved: 110[Submit][Status ...
- 【bzoj4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+背包dp
题目描述 给出 $n$ 个括号序列,从中选出任意个并将它们按照任意顺序连接起来,求以这种方式得到匹配括号序列的最大长度. 输入 第一行包含一个正整数n(1<=n<=300),表示括号序列的 ...
- bzoj 4919: [Lydsy六月月赛]大根堆
Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质: ...
- 【BZOJ4919】[Lydsy六月月赛]大根堆
题解: 我觉得数据结构写成结构体还是有必要的 因为不然一道题里出现了两个相同的数据结构由于名字很像很容易出错 另外初始化用segmenttree(){ } 首先裸的dp很好想 f[i][j]表示在i点 ...
- 【bzoj4921】[Lydsy六月月赛]互质序列 暴力
题目描述 给出一个序列,要求删除一段非空区间,使得剩下的数的个数大于等于2.求所有删除方式剩下的数的最大公约数的和. 输入 第一行包含一个正整数n(3<=n<=100000),表示序列的长 ...
- 【BZOJ5072】[Lydsy十月月赛]小A的树 树形DP
[BZOJ5072][Lydsy十月月赛]小A的树 题解:考虑我们从一个联通块中替换掉一个点,导致黑点数量的变化最多为1.所以我们考虑维护对于所有的x,y的最大值和最小值是多少.如果询问的y在最大值和 ...
- 【BZOJ5073】[Lydsy十月月赛]小A的咒语 DP(错解)
[BZOJ5073][Lydsy十月月赛]小A的咒语 题解:沙茶DP,完全不用后缀数组. 用f[i][j]表示用了A的前i个字符,用了j段,最远能匹配到哪.因为显然我们能匹配到的地方越远越好,所以我们 ...
随机推荐
- mysql 修改数据库存储地址
默认目录/var/lib/mysql systemctl stop mysqld cp -pr /var/lib/mysql /data/mysql Create a backup of /etc/m ...
- 说说$POST 、$HTTP_RAW_POST_DATA、php://input三者之间的区别
$POST $_POST是我们最常用的获取POST数据的方式,它是以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换,识别的数据类型是PHP默认识别的数据类型 app ...
- ASP.NET C# 获取当前日期 时间 年 月 日 时 分 秒
我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...
- 也谈谈js的压缩,jquery压缩。【转】
问题缘由: 负责公司的开发平台研发工作,考虑的知识产权的保护工作,必须要考虑java的加密技术和js脚本的加密技术.在目前java加密很容易破解的情况下,还是先搞定js的加密和压缩,一方面可以提高页面 ...
- Struts2学习笔记(OGNL表达式)
Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JSTL(JSP Standard T ...
- 用C语言显示汉字的演示程序
汉字是方块字,宽高相等的汉字库在嵌入式领域有着广泛的应用,且其解析也相对来说是比较简单的.汉字在汉字库中的索引一般会遵循GB2312/GBK编码规则,GB2312/GBK规定汉字编码由2个字节组成,其 ...
- (转)从海康7816的ps流里获取数据h264数据
海康7816使用ps流来封装h.264数据,这里使用的解码器无法识别ps流,因此需要将h264数据从ps流里提取出来 对于ps流的规定可以参考13818-1文档 这里从7816里获取到一些数据取样 0 ...
- 监视在input框中按下回车(enter) js实现
function getKey(event) { if (event.keyCode == 13) { alert("我是回车键"); } } <input type=&qu ...
- jquery-包裹元素
1.wrap方法 在每个匹配的元素外层包上一个html元素 参数类型说明: 1)html字符串 $('p').wrap('<div></div>'); 传入的html标签也可以 ...
- VC实现波形不闪烁动态绘图 .
http://blog.csdn.net/xuyongbeijing2008/article/details/8064284 源代码:http://www.vckbase.com/index.php/ ...