HDU 6299 Balanced Sequence(贪心)
题目:给出N个只有左右括号字符串 ,这N个字符串的排列顺序是任意的 , 问按最优的排序后 , 得到最多匹配的括号个数
分析: 我们很容易的想到 字符串)()()(( , 这样的字符串可以精简为)(( 因为无论如何的排序 ,对于字符串可以匹配的括号是不会变的 ;
那么问题就可以简化为对与 **)(** ) ( 这几种类型的字符串的排序情况 ;
我们也很自然而然的想到了贪心 ,那问题来了 ,我们该如何贪心呢?先从小问题出发 , 有A 与 B两串 , 在自然的可以想到 排序的情况肯定是AB或者BA 看谁的匹配度高吧 , 那依据这样的思想 , 定义出完整的贪心规则:
1.A.sumz<=A.sumy && B.sumz>b.sumy 就是说明AB这样可以更加优秀
2.A.sumz>A.sumy && B.sumz<=B.sumy 就是说明BA这样的更优秀的
3.如果 1 / 2 两种情况都不是那就是说匹配度一样,那很自然的可以想到 右括号多的在后面 , 左括号多的在前面
好了AC了 , 太遗憾这题。。贪心的规则打错了, 但思路是没问题的 , 还需加油呀
#include<bits/stdc++.h>
using namespace std ;
char str[],sta[];
struct no
{
int sumz , sumy;
}a[]; bool cmp(no a , no b)
{
if(a.sumz<=a.sumy && b.sumz>b.sumy)
return ; if(a.sumz>a.sumy && b.sumz<=b.sumy)
return ; if(a.sumy>=a.sumz && b.sumy>=b.sumz)
return a.sumz<b.sumz;
return a.sumy>b.sumy;
} int main()
{
int t,n,top,sum,sumz,sumy;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i= ; i<n ; i++)
{
a[i].sumz=a[i].sumy=;
}
sum=;
for(int i= ; i<n ; i++)
{
scanf("%s",str);
int Len=strlen(str);
top=sumz=sumy=;
for(int j= ; j<Len ; j++)
{
if(str[j]=='(')
{
a[i].sumy++;
}
else
{
if(a[i].sumy)
{
a[i].sumy--;sum++;
}
else
{
a[i].sumz++;
}
}
} }
sort(a,a+n,cmp);
for(int i= ; i<n ; i++)
{
if(a[i].sumz<a[i-].sumy)
{
sum+=a[i].sumz;
a[i].sumy=a[i].sumy+(a[i-].sumy-a[i].sumz);
}
else if(a[i].sumz==a[i-].sumy)
sum+=a[i].sumz;
else
{
sum+=a[i-].sumy;
a[i].sumz=a[i].sumz-a[i-].sumy;
}
}
printf("%d\n",*sum); }
}
HDU 6299 Balanced Sequence(贪心)的更多相关文章
- hdu 6299 Balanced Sequence (贪心)
Balanced Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdu 6299 Balanced Sequence (括号序列,贪心)
大意: 记$f(t)$表示字符串$t$的最长括号匹配子序列, 给定n个括号序列, 求它们重排后的最大f(t). 首先可以注意到一个括号序列中已经匹配的可以直接消去, 一定不会影响最优解. 那么这样最终 ...
- hdu 6299 Balanced Sequence(贪心)题解
题意:题意一开始不是很明白...就是他给你n个串,让你重新排列组合这n个串(每个串内部顺序不变),使得匹配的括号长度最大.注意,题目要求not necessary continuous,括号匹配不需要 ...
- hdu 6299 Balanced Sequence( 2018 Multi-University Training Contest 1 )
#include <stdio.h> #include <iostream> #include <cstdlib> #include <cmath> # ...
- HDU 6299.Balanced Sequence-贪心、前缀和排序 (2018 Multi-University Training Contest 1 1002)
HDU6299.Balanced Sequence 这个题就是将括号处理一下,先把串里能匹配上的先计数去掉,然后统计左半边括号的前缀和以及右半边括号的前缀和,然后结构体排序,然后遍历一遍,贪心策略走一 ...
- hdu6299 Balanced Sequence 贪心
题目传送门 题目大意:给出n个字符串,定义了平衡字符串,问这些字符串组合之后,最长的平衡字符子序列的长度. 思路: 首先肯定要把所有字符串先处理成全是不合法的,记录右括号的数量为a,左括号的数量为b, ...
- hdu 6047 Maximum Sequence 贪心
Description Steph is extremely obsessed with “sequence problems” that are usually seen on magazines: ...
- HDU 6047 Maximum Sequence(贪心+线段树)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...
- HDU 6047 Maximum Sequence (贪心+单调队列)
题意:给定一个序列,让你构造出一个序列,满足条件,且最大.条件是 选取一个ai <= max{a[b[j], j]-j} 析:贪心,贪心策略就是先尽量产生大的,所以就是对于B序列尽量从头开始,由 ...
随机推荐
- 733. Flood Fill 简单型染色问题
[抄题]: An image is represented by a 2-D array of integers, each integer representing the pixel value ...
- 599. Minimum Index Sum of Two Lists两个餐厅列表的索引和最小
[抄题]: Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of fa ...
- CentOS集群自动同步时间的一种方法
CentOS集群自动同步时间的一种方法 之前有篇日志是手动同步时间的 http://www.ahlinux.com/os/201304/202456.html 之所以这么干,是因为我们实验室的局域网只 ...
- SQL语句学习积累·数据的操作
数据的操作 select 取表中前五条数据 select top 5 from table_name 取表中前50%的数据 select top 50 percent from table_name ...
- JAVA读取控制台的输入【转】
前面介绍了使用IO类实现文件读写的示例,其实在很多地方还需要使用到IO类,这里再以读取控制台输入为例子来介绍IO类的使用. 控制台(Console)指无图形界面的程序,运行时显示或输入数据的位置,前面 ...
- DB2 添加license
DB2 - DB2COPY1 - DB2-0 服务不能启动报的错是这样的:Microsoft Management Console Windows 不能在 本地计算机 启动 DB2 - DB2.有 ...
- react-native-echarts构建的图表出现滚动条并且可以滑动的问题
前段时间做echarts饼状图,按照官方提供的写法完成以后图表可以出来,但是虚拟机上演示出现了滚动条,并且拖动时就会出现空白,双击会缩小像这样 参考GitHub上给出的方法修改成功: no ...
- Arduino I2C + 数字式环境光传感器BH1750FVI
BH1750FVI是日本罗姆(ROHM)半导体生产的数字式环境光传感IC.其主要特性有: I2C数字接口,支持速率最大400Kbps 输出量为光照度(Illuminance) 测量范围1~65535 ...
- angular 路由传参
第一种:<a [routerLink]="['/product']" [queryParams]="{id: 1}">商品详情</a> ...
- webservice不能序列化接口问题,返回值为IList或者参数为接口的解决办法。
1. webservice 不能返回泛型接口集合IList,解决办法如下链接: 参考资料:http://www.cnblogs.com/yinhaiming/articles/1379424.html ...