Magic Door

题目大意:

给一个字符串,问需要至少覆盖多少次。

题目分析

区间dp: dp[i][j]表示达到i~j这个状态的最少覆盖次数,分两种情况:

  • s[i] == s[j]: 此时内层可能仍然相等或不相等,则

\[dp[i][j] = min(dp[i + 1][j], dp[i][j - 1], dp[i + 1][j - 1] + 1)
\]

以上括号中三种分别对应以下三种情况:

★☆☆☆☆★★, ★★☆☆☆☆★, ★☆☆☆☆☆★

  • s[i] != s[j]: 枚举断点k:

\[dp[i][j] = min\{dp[i][k] + dp[k + 1][j]\}
\]

code

#include<bits/stdc++.h>
using namespace std; const int N = 100, OO = 0x3f3f3f3f;
char s[N];
int dp[N][N], len; inline int DP(int l, int r){
if(dp[l][r] != -1) return dp[l][r];
if(l == r) return dp[l][r] = 1;
int tmp = OO;
if(s[l] == s[r]) tmp = min(tmp, min(DP(l, r - 1), min(DP(l + 1, r), DP(l + 1, r - 1) + 1)));
else for(int k = l; k < r; k++) tmp = min(tmp, DP(l, k) + DP(k + 1, r));
return dp[l][r] = tmp;
} int main(){
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
cin >> s + 1; len = strlen(s + 1);
memset(dp, -1, sizeof dp);
cout << DP(1, len);
return 0;
}

最新文章

  1. MapReduce的ReduceTask任务的运行源码级分析
  2. spring mvc 第四天【注解实现springmvc 配合使用Exception Resolver 的配置】
  3. IE9以上 CSS文件因Mime类型不匹配而被忽略 其他浏览器及IE8以下显示正常
  4. Ajax.ActionLink与Ajax.BeginForm使用场所的思考
  5. 函数 page_dir_get_n_heap
  6. 使用node-webkit开发Clover桌面客户端的一些记录(一)
  7. qemu cow镜像分析
  8. Baby Step Gaint Step
  9. Reeder Web版
  10. vs2010帮助文档下载以及帮助查看器(H3Viewer)的使用
  11. 任意2个io直接驱动LCD1602,并且不需外加芯片(转)
  12. K好数--蓝桥杯
  13. c#读取并分析sql Server2005数据库日志
  14. 微信小程序之Todo
  15. lookup_peer.go
  16. centos6.5安装/升级到python2.7
  17. Qt5鼠标事件及实例
  18. pycharm下打开、执行并调试scrapy爬虫程序
  19. Tornado 文件操作笔记
  20. C#——性能计数器

热门文章

  1. [python]两种编程思维--面向过程和面向对象
  2. java线程——详解Callable、Future和FutureTask
  3. log4j配置文件及nutch中的日志配置 分类: B1_JAVA 2015-02-17 10:58 483人阅读 评论(0) 收藏
  4. 深度学习利器: TensorFlow系统架构及高性能程序设计
  5. Codeforces Round 363 Div. 1 (A,B,C,D,E,F)
  6. oracle主机名修改
  7. 洛谷——P1774 最接近神的人_NOI导刊2010提高(02)
  8. zabbix自定义监控mysql
  9. 从零开始使用git第三篇:git撤销操作、分支操作和常见冲突
  10. javascript 调用C++函数