题目链接:https://uva.onlinejudge.org/external/16/1626.pdf

题意: 给定一个字符串,看是否括号匹配,不匹配加括号,加最少的括号使得匹配。输出该结果。

分析: 解题思路和切木棍很类似。d(i,j) i ~ j 要加最少多少括号,他一定等于: 分两种情况,一:[s'],(s'),d(i,j) = d(i+1,j-1);二: d(i,j) = min(d(i,k),d(k+1,j));

注意: 输入有空行。

#include <bits/stdc++.h>
using namespace std; const int maxn = +;
char S[maxn];
int n,d[maxn][maxn]; bool match(char a,char b)
{
return (a=='('&&b==')')||(a=='['&&b==']');
} void readline(char *S)
{
fgets(S,maxn,stdin);
} int dp(int i,int j)
{
if(i>j) return ;
if(i==j) return ;
int& ans = d[i][j];
if(ans>=) return ans;
ans = n;
if(match(S[i],S[j]))
ans = min(ans,dp(i+,j-));
for(int k=i; k<j; k++)
{
ans = min(ans,dp(i,k)+dp(k+,j));
}
return ans;
} void print(int i,int j)
{ if(i>j) return ;
if(i==j)
{
if(S[i]=='('||S[i]==')') printf("()");
else printf("[]");
return ;
} int ans = dp(i,j);
if(match(S[i],S[j])&&ans==dp(i+,j-))
{
printf("%c",S[i]);
print(i+,j-);
printf("%c",S[j]);
return;
} for(int k=i; k<j; k++)
{
if(ans==dp(i,k)+dp(k+,j))
{
print(i,k);
print(k+,j);
return ;
}
}
} int main()
{
int T; readline(S);
sscanf(S, "%d", &T);
readline(S); while(T--)
{
readline(S);
n = strlen(S) - ;
memset(d, -, sizeof(d));
print(, n-);
printf("\n");
if(T) printf("\n");
readline(S);
}
return ;
}

最新文章

  1. 复合主键@IdClass
  2. Spring in action笔记
  3. java 中的访问修饰符
  4. 使用doxygen生成注释文档
  5. [ios2] 利用钥匙串,在应用里保存用户密码的方法 【转】
  6. HDU-1013九余数定理
  7. 03 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之web层
  8. 基于centos7+nginx+uwsgi+python3+django2.0部署Django项目
  9. Day08 (黑客成长日记) 命名空间和作用域
  10. Redis分布式锁(ServiceStack.Redis实现)
  11. liunx文件操作 文件查看
  12. Windows编程之connect函数研究
  13. cocos2d-x_lua中tolua++绑定c++分享
  14. 用vue实现登录页面
  15. ElasticSearch安装及简单配置说明
  16. Encoding::CompatibilityError: incompatible character encodings: GBK and UTF-8
  17. php如何运行
  18. nodejs 实践:express 最佳实践 (一) 项目结构
  19. ConfigurationErrorsException: Unrecognized configuration section system.data.
  20. kubernetes调度之资源配额示例

热门文章

  1. PostgreSQL9.1 upgrade to PostgreSQL9.5rc1
  2. codeforces-Glass Carving(527C)std::set用法
  3. poj 算法 分类
  4. [转]JqueryEasyUI教程入门篇
  5. Java基础(4):Scanner输入的典型应用
  6. android ANR问题
  7. ACdream 1104 瑶瑶想找回文串(SplayTree + Hash + 二分)
  8. bzoj 4237稻草人
  9. paper 27 :图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)
  10. 关于mybatis 在C#.Net中批量增,删,改