题目:给出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); }
}

最新文章

  1. SQL SERVER 合并重复行,行列转换
  2. java 25 - 5 网络编程之多线程实现聊天室
  3. extJs学习基础2
  4. 在Fedora8上安装jdk-7u25-linux-i586.rpm的步骤
  5. 什么是PHP魔术引号
  6. 用Delphi实现文件关联
  7. Lotus 迁移到Exchange POC 之安装Exchange 2010!
  8. angular这个大梗的学习笔记
  9. 【Java基础】Integer包装类的缓冲池问题
  10. Mysql 利用multiline 实现多行匹配
  11. ListView 的三种数据绑定方式
  12. 面试(三)---volatile
  13. .htaccess使用方法介绍
  14. 浅谈get,post,put和delete请求
  15. 大数据学习笔记3 - 并行编程模型MapReduce
  16. Linux基础命令---tracepath追踪路由信息
  17. hbase和zookeeper的安装和部署
  18. ubuntu,windows 卸载安装mysql
  19. API网关Kong系列(三)添加服务
  20. 如何使用socket进行java网络编程(一)

热门文章

  1. wdcp挂载数据盘为WWW以及之后出现的各种问题解决方法
  2. 面试题:servlet jsp cook session 背1
  3. 对于 yii2 高级模板 生成文件入口
  4. jQuery form 插件
  5. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(3):常用动态代理之JDK动态代理、CGLIB动态代理
  6. 命令(Command)模式
  7. 一个数组:1,1,2,3,5,8,13,21...+m,求第30位数是多少?用递归实现;(常考!!!)
  8. SQL server T-sql语句查询执行顺序
  9. SpringMVC+Hibernate 项目开发之一(Maven环境搭建)
  10. MVC 路由调试工具-RouteDebugger