【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段,最远能匹配到哪.因为显然我们能匹配到的地方越远越好,所以我们 ...
随机推荐
- C#里面的三种定时计时器:Timer
在.NET中有三种计时器:1.System.Windows.Forms命名空间下的Timer控件,它直接继承自Componet.Timer控件只有绑定了Tick事件和设置Enabled=True后才会 ...
- jquery-easyui 中表格的行编辑功能
具体实现代码如下: <table id="tt"></table> $('#tt').datagrid({ title:'Editable DataGrid ...
- 空间管理 您的位置: 51Testing软件测试网 » lilisx2006的个人空间 » 日志 在一个没有测试经理的小公司如何做好测试
如何在一个没有测试经理的小公司做好测试? 首先,没有测试经理意味着测试人员没有最直接的管理者,往往这种时候的管理者是开发经理或技术总监,但他们何其忙耶?同时,在无人监管的情况下,测试是一个很容易偷懒的 ...
- MapReduce生成HFile入库到HBase
转自:http://www.cnblogs.com/shitouer/archive/2013/02/20/hbase-hfile-bulk-load.html 一.这种方式有很多的优点: 1. 如果 ...
- java笔记知识点总结
1.switch case default 语句 : switch case 语句是一个条件选择语句,找到相同的case值做为入口,执行后面的程序:若所有的case都不满足,则找default入口:若 ...
- bcm53344 gpio驱动分析
/********************************************************************************* * 1.查看代码是在vim下,使用 ...
- e676. 把彩色图像转换为灰色
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); ColorConvertOp op = new ColorConvertOp(c ...
- mysql命令行远程登录命令
mysql -u root -psalon365365 -h 192.168.1.103 -P 3 306 -D empirecms
- HDU 1020:Encoding
pid=1020">Encoding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- Z字形扫描矩阵
问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...