题目:给出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(贪心)的更多相关文章

  1. hdu 6299 Balanced Sequence (贪心)

    Balanced Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. hdu 6299 Balanced Sequence (括号序列,贪心)

    大意: 记$f(t)$表示字符串$t$的最长括号匹配子序列, 给定n个括号序列, 求它们重排后的最大f(t). 首先可以注意到一个括号序列中已经匹配的可以直接消去, 一定不会影响最优解. 那么这样最终 ...

  3. hdu 6299 Balanced Sequence(贪心)题解

    题意:题意一开始不是很明白...就是他给你n个串,让你重新排列组合这n个串(每个串内部顺序不变),使得匹配的括号长度最大.注意,题目要求not necessary continuous,括号匹配不需要 ...

  4. hdu 6299 Balanced Sequence( 2018 Multi-University Training Contest 1 )

    #include <stdio.h> #include <iostream> #include <cstdlib> #include <cmath> # ...

  5. HDU 6299.Balanced Sequence-贪心、前缀和排序 (2018 Multi-University Training Contest 1 1002)

    HDU6299.Balanced Sequence 这个题就是将括号处理一下,先把串里能匹配上的先计数去掉,然后统计左半边括号的前缀和以及右半边括号的前缀和,然后结构体排序,然后遍历一遍,贪心策略走一 ...

  6. hdu6299 Balanced Sequence 贪心

    题目传送门 题目大意:给出n个字符串,定义了平衡字符串,问这些字符串组合之后,最长的平衡字符子序列的长度. 思路: 首先肯定要把所有字符串先处理成全是不合法的,记录右括号的数量为a,左括号的数量为b, ...

  7. hdu 6047 Maximum Sequence 贪心

    Description Steph is extremely obsessed with “sequence problems” that are usually seen on magazines: ...

  8. HDU 6047 Maximum Sequence(贪心+线段树)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=6047 题目: Maximum Sequence Time Limit: 4000/2000 MS (J ...

  9. HDU 6047 Maximum Sequence (贪心+单调队列)

    题意:给定一个序列,让你构造出一个序列,满足条件,且最大.条件是 选取一个ai <= max{a[b[j], j]-j} 析:贪心,贪心策略就是先尽量产生大的,所以就是对于B序列尽量从头开始,由 ...

随机推荐

  1. MAT(Memory Analyzer tool)使用

    当线上环境出现OOM/内存泄漏了,怎么办? 让虚拟机在发生内存溢出时 Dump 出当前的内存堆转储快照,配置-XX:+HeapDumpOnOutOfMemoryError, 当出现OOM时,分析dum ...

  2. 14-stringstream

    C++中stringstream的使用方法和样例 原创 2016年11月06日 15:46:49 标签: string / C++ 7427 之前在leetcode中进行string和int的转化时使 ...

  3. 2-配置Andriod环境时的错误。。。Theme.AppCompat.Light

    编译或运行时可能会出现错误: Error:Error retrieving parent for item: No resource found that matches the given name ...

  4. 61-结点选择(树形dp)

     http://lx.lanqiao.cn/problem.page?gpid=T14 算法训练 结点选择   时间限制:1.0s   内存限制:256.0MB        问题描述 有一棵 n 个 ...

  5. 关于前端XSS攻击、短信轰炸等问题

    关于前端的XSS攻击: 这里有一篇Ryf老师的写的关于使用  Content Security Policy (简称 CSP 防御)来防御xss攻击,简单来说就是设置白名单,告诉浏览器哪些链接.内容是 ...

  6. Java集合类总结 (三)

    HashSet类 关于HashMap的实现细节 HashMap是用LinkedList实现的,每个list被称为一个桶(bucket),在hashmap中要查找一个元素,首先对传入的key进行散列,并 ...

  7. angular Docheck

    import { Component, OnInit, Input, OnChanges, SimpleChanges, DoCheck } from '@angular/core'; @Compon ...

  8. WinForm中使用自定义Tooltip控件

    private ToolTip tooltipCtr; 构造函数中: 隐藏默认的Tooltip:this.ShowCellToolTips = false; this.tooltipCtr = new ...

  9. 「HNOI2010」合唱队

    题目链接 戳我 \(Solution\) 令: \(f[i][j]\)为\([i,j]\)中最后排进去的是第i人 \(dp[i][j]\)为\([i,j]\)中最后排进去的是第j人 则排头的元素即\( ...

  10. kali linux之sqlmap

    一款开源的命令行自动SQL注入工具,它能够对多种主流数据库进行扫描支持,基于Python环境. 检测动态页面中get/post参数,cookie,http头 数据榨取/文件系统访问 操作系统命令执行 ...