[SCOI2007]压缩(区间dp)
2024-10-02 11:12:47
神仙题,看了半天题解才看明白。。。
因为题目里说如果没有m,会自动默认m在最前面。
我们设计状态为dp[l][r][0/1]为在区间l到r中有没有m的最小长度。
转移:枚举我们要压缩的起点,dp[l][i][1]+dp[i+1][r][1]+1,加一是指我们要压缩后半段,在断点处加上一个m。
如果我们不压缩后半段,那转移就为dp[l][i][1]+r-i,因为后面不动,就直接加上。
如果发现它可以压缩,直接dp[l][mid][0]+1,注意tag为0。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 55
using namespace std;
int dp[N][N][],n;
char s[N];
inline bool pd(int l,int r){
if((r-l+)%==)return ;
int len=(r-l+)/;
for(int i=l;i<=l+len-;++i)
if(s[i]!=s[i+len])return ;
return ;
}
int dfs(int l,int r,int tag){
if(dp[l][r][tag])return dp[l][r][tag];
int ans=r-l+;
if(ans==)return ans;
if(tag)
for(int i=l;i<r;++i)ans=min(ans,dfs(l,i,)++dfs(i+,r,));
for(int i=l;i<r;++i)ans=min(ans,dfs(l,i,tag)+r-i);
if(pd(l,r))ans=min(ans,dfs(l,(l+r)>>,)+);
return dp[l][r][tag]=ans;
}
int main(){
scanf("%s",s);
n=strlen(s);
printf("%d",dfs(,n-,));
return ;
}
最新文章
- kendo ui 富文本编辑控件 Editor 实现本地上传图片,并显示
- iOS边练边学--菜单悬停效果的实现思路
- 简易博客编辑器:玩转document.execCommand命令
- JS与OC交互--简单使用
- Esper系列(九)NamedWindow语法create、Insert、select
- double 类型运算会出现精度问题
- nginx模块开发获取post参数
- 用N2N搭建简单的VPN
- C# 从字符串向 datetime 转换时失败
- 让你变懒的 Android Studio Live Templates
- 自学MongoDB(1)
- STM32F103/429串口IAP+Ymodem升级
- pyspider 启动错误遇到的一些坑
- Flask学习【第3篇】:蓝图、基于DBUtils实现数据库连接池、上下文管理等
- java学习笔记25(Collections类)
- #leetcode刷题之路38-报数
- 依据分辨率区分手机、平板、pc
- 从块级元素和行内元素的分析到bfc的布局理解
- 微软 eshop 数据存储之sqlserver
- 使用GraphViz画caffe网络结构图
热门文章
- C#设计模式之4:装饰者模式
- [转帖]前端-chromeF12 谷歌开发者工具详解 Network篇
- js如何复制一个对象?
- AngularJS:directive自定义的指令
- systemd取消对服务重启的限制
- Web API2 使用EF Code Migrations to Seed DB
- React 学习(一) ---- React Element /组件/JSX
- [离散时间信号处理学习笔记] 3. 一些基本的LTI系统
- Jquery实现菜单栏
- 如何下载旧版本的MySQL