来自FallDream的博客,未经允许,请勿转载,谢谢。


卡常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令人捉摸不透,有时候会让水平很高的选手迷之超时。
普遍认为卡常数是埃及人Qa'a及后人发现的常数。也可认为是卡普雷卡尔(Kaprekar)常数的别称。主要用于求解括号序列问题。
据考证,卡(Qa'a)是古埃及第一王朝的最后一位法老。他发现并研究了一种常数,后世以他的名字叫做卡常数。卡特兰数的起源也是因为卡的后人与特兰克斯结婚,生下来的孩子就叫卡特兰,而他只是发表了祖传的家书而已。Sereja也是卡的后人,提出括号序列问题,也是从家书里得到的资料。然而Sereja为了不让这个秘密公开,于是隐瞒了这道题的真正做法。可是由于卡的后人不是各个都像卡特兰一样爱慕虚荣,这一算法也无法找到。“欲见贤人而不以其道,犹欲其入而闭之门也”。卡之常数的奥秘,需要以一颗诚心去追寻。
现给定n个括号序列,你需要选择若干序列,将它们按一定的顺序从左往右拼接起来,得到一个合法的括号序列。
显然,这个问题可以用卡常数解决,为了检验你是否会卡常数,请写一个程序,计算可以得到的合法的括号序列的长度的最大值。
n<=300 
合法的括号序列只要满足前缀和都大等于0并且总和是0就行了。
预处理每个序列的和还有前缀最小值
合法的括号序列可以看成两段接起来,分别由和是正的 和 和是负的组成。
对于和是正的,按照前缀最小值排序之后背包dp
负的也同理,翻转一下就是同样的做法了。
复杂度n^3
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MN 300
using namespace std;
inline int read()
{int x = 0 , f = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') f = -1;  ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}
char st[MN+5][MN+5];
int n,len[MN+5],mn[MN+5],f[MN*MN+5],g[MN*MN+5],mx[MN+5],top=0,top2=0,ans=0;
struct data{int x,l,len;}q[MN+5],q2[MN+5];
bool cmp(data x,data y){return x.x>y.x;}
int main()
{n=read();memset(f,128,sizeof(f));memset(g,128,sizeof(g));for(int i=1;i<=n;++i) {scanf("%s",st[i]+1);for(int j=1;st[i][j];++j)len[i]+=st[i][j]=='('?1:-1,mn[i]=min(mn[i],len[i]);for(int j=strlen(st[i]+1),k=0;j;--j)k+=st[i][j]=='('?1:-1,mx[i]=max(mx[i],k);len[i]>=0?(q[++top]=(data){mn[i],len[i],strlen(st[i]+1)},0):(q2[++top2]=(data){-mx[i],-len[i],strlen(st[i]+1)},0);}sort(q+1,q+top+1,cmp);sort(q2+1,q2+top2+1,cmp);f[0]=g[0]=0;for(int i=1;i<=top;++i)for(int j=i*MN;j>=q[i].l-q[i].x;--j)f[j]=max(f[j],f[j-q[i].l]+q[i].len);for(int i=1;i<=top2;++i)for(int j=i*MN;j>=q2[i].l-q2[i].x;--j)g[j]=max(g[j],g[j-q2[i].l]+q2[i].len);for(int i=MN*MN;~i;--i)if(f[i]>=0&&g[i]>=0) ans=max(ans,f[i]+g[i]);cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/FallDream/p/bzoj4922.html

[bzoj4922]Karp-de-Chant Number相关推荐

  1. ApiDoc官方文档

    目录 一.apidoc简介 二.apidoc安装使用 2.1 apidoc 命令参数列表: 2.2 配置(apidoc.json) 三. apidoc注释参数 3.1 @api 3.2 @apiDef ...

  2. 数据结构基础温故-6.查找(下):哈希表

    哈希(散列)技术既是一种存储方法,也是一种查找方法.然而它与线性表.树.图等结构不同的是,前面几种结构,数据元素之间都存在某种逻辑关系,可以用连线图示表示出来,而哈希技术的记录之间不存在什么逻辑关系, ...

  3. 1015 德才论 (25 分)(c语言)

    宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子 ...

  4. apiDoc构建源代码注释的接口文档

    RESTful web API Documentation Generator. http://apidocjs.com 入门 前言 本文档中的所有示例都使用Javadoc-Style(可用于C#,G ...

  5. oracle完整的练习,2021史上最全Oracle数据库基本操作练习题(含答案).docx

    Oracle基本操作练习题 使用表: 员工表(emP): (empndNUMBEER) notnull ,--员工编号,表示唯一 enameZARCHAR20),--员工姓名 VARCHAR9),-- ...

  6. 希尔伯特及其《几何学基础》电子版(英文PDF),

    希尔伯特的巨著<几何学基础>是现代公理化数学的源头与楷模. 在此书发表一百周年之际,国外有人将其翻译成英文版发布在互联网上,任其传播,很有意义.在数学发展史上,希尔伯特<几何学基础& ...

  7. Android的根证书颁发机构列表

    23set 23 集 Since it was a little hard for me finding it, here you can find the trusted CAs inAndroid ...

  8. apidoc的介绍和使用

    github apidoc demo apidoc展示效果 入门 前言 本文档中的所有示例使用Javadoc样式(可以在C#中使用,围棋,飞镖,Java和JavaScript的,PHP,打字稿和所有其 ...

  9. 段错误需要使用的工具 nm objdump readelf

    nm:列出目标文件中的符号. objdump:显示目标文件中的详细信息. readelf:显示关于 ELF 目标文件的信息. 具体的readelf命令可以查看 列表中的第一个工具是 nm,它可以列出目 ...

  10. nodejs下的apidoc 帮助接口文档生成

    在项目开发过程中,总会牵扯到接口文档的设计与编写,之前使用的都是office工具,写一个文档,总也是不够漂亮和直观.好在git上的开源大神提供了生成文档的工具,so来介绍一下! 该工具是Nodejs的 ...

最新文章

  1. 上升沿_不懂上升、下降沿的我,高兴惨了!
  2. 成都黑帽门图片大全_2020成都第一波出行/便民/打卡免费大全
  3. Redis 性能问题分析
  4. Codeforces Round #648 (Div. 2)(A, B, C, D)
  5. 改善Java应用程序性能的快速技巧
  6. zigbee是什么,为什么说它最适合智能家居设备
  7. 用python实现星期的转换_在Python中将秒转换为周-天-小时-分钟-秒
  8. 自己调用NTDLL函数
  9. C++编程练习(14)-------“单例模式”的实现
  10. Struts2体系介绍
  11. jrtplib linux编译,linux下jrtplib-3.9.1编译与安装.txt
  12. 看山不是山看水不是水
  13. Serval Project——Android
  14. h5滚动时侧滑出现_iH5中级教程:微场景H5必备,滑动时间轴+轨迹
  15. 现代循环神经网络 - 机器翻译与数据集
  16. OpenCV定位二维码的三个定位点
  17. 【三】仿射变换、投影变换的矩阵形式和特点归纳
  18. 旋转编码器怎么调零点?
  19. xp系统服务器的ip地址怎么查,xp怎么配置ip地址|xp系统怎么样查看自己的ip地址...
  20. Zookeeper出现Error contacting service. It is probably not running问题

热门文章

  1. python 端口扫描
  2. 采用个hook技术对writefile函数进行拦截(2)
  3. 如何快速入手一个JavaWeb项目
  4. python自动华 (七)
  5. StackExchange.Redis 官方文档(二) Configuration
  6. TabHost刷新activity的方法
  7. 小议 static 关键字
  8. LPS在无人机数据处理中的应用
  9. linux lnmp1.5 部署laravel项目
  10. PageCollectionView[Bug],使用Filter的时候,删除集合中的元素,会导致ArgumentOutOfRangeException...