BZOJ 1260 - 区间dp
2024-08-29 23:29:56
题目大意:
给一个字符串,问需要至少覆盖多少次。
题目分析
区间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;
}
最新文章
- MapReduce的ReduceTask任务的运行源码级分析
- spring mvc 第四天【注解实现springmvc 配合使用Exception Resolver 的配置】
- IE9以上 CSS文件因Mime类型不匹配而被忽略 其他浏览器及IE8以下显示正常
- Ajax.ActionLink与Ajax.BeginForm使用场所的思考
- 函数 page_dir_get_n_heap
- 使用node-webkit开发Clover桌面客户端的一些记录(一)
- qemu cow镜像分析
- Baby Step Gaint Step
- Reeder Web版
- vs2010帮助文档下载以及帮助查看器(H3Viewer)的使用
- 任意2个io直接驱动LCD1602,并且不需外加芯片(转)
- K好数--蓝桥杯
- c#读取并分析sql Server2005数据库日志
- 微信小程序之Todo
- lookup_peer.go
- centos6.5安装/升级到python2.7
- Qt5鼠标事件及实例
- pycharm下打开、执行并调试scrapy爬虫程序
- Tornado 文件操作笔记
- C#——性能计数器
热门文章
- [python]两种编程思维--面向过程和面向对象
- java线程——详解Callable、Future和FutureTask
- log4j配置文件及nutch中的日志配置 分类: B1_JAVA 2015-02-17 10:58 483人阅读 评论(0) 收藏
- 深度学习利器: TensorFlow系统架构及高性能程序设计
- Codeforces Round 363 Div. 1 (A,B,C,D,E,F)
- oracle主机名修改
- 洛谷——P1774 最接近神的人_NOI导刊2010提高(02)
- zabbix自定义监控mysql
- 从零开始使用git第三篇:git撤销操作、分支操作和常见冲突
- javascript 调用C++函数