bzoj1090 [SCOI2003]字符串折叠——区间DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1090
区间DP...
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,ans,dp[][];
char c[];
bool pd(int l1,int r1,int l2,int r2)
{
int k1=r1-l1+,k2=r2-l2+;
if(k1%k2)return ;//前一个区间较长
for(int i=;i<k1;i++)
if(c[l1+i]!=c[l2+i%k2])return ;
return ;
}
int cal(int x)
{
int ret=;
while(x)ret++,x/=;
return ret;
}
int main()
{
cin>>c;
n=strlen(c);
for(int i=;i<n;i++)
for(int j=;j<n;j++)
dp[i][j]=j-i+;
for(int len=;len<=n;len++)
for(int l=;l+len<n;l++)
{
int r=l+len;
for(int k=l;k<r;k++)
{
dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+][r]);
if(pd(k+,r,l,k))dp[l][r]=min(dp[l][r],dp[l][k]++cal((r-k)/(k-l+)+));//纯折叠 //以l~k为一个循环节,注意不要除反了
}
}
printf("%d",dp[][n-]);
return ;
}
还有递归版:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[];
int f[][];
bool mark[][];
bool pd(int l1,int r1,int l2,int r2)
{
int k1=r1-l1+,k2=r2-l2+;
if(k1%k2)return ;//前一个区间较长
for(int i=;i<k1;i++)
if(s[l1+i]!=s[l2+i%k2])return ;
return ;
}
int cal(int x)
{
int ret=;
while(x)ret++,x/=;
return ret;
}
int dp(int l,int r)
{
if(l==r)return ;
if(mark[l][r])return f[l][r];
mark[l][r]=;
int t=r-l+;
for(int i=l;i<r;i++)
{
t=min(t,dp(l,i)+dp(i+,r));
if(pd(l,i,i+,r))t=min(t,dp(l,i)++cal((i-l+)/(r-i)+));
}
return f[l][r]=t;
}
int main()
{
cin>>s;
printf("%d",dp(,strlen(s)-));
return ;
}
递归
bzoj1090 [SCOI2003]字符串折叠——区间DP的更多相关文章
- 【BZOJ-1090】字符串折叠 区间DP + Hash
1090: [SCOI2003]字符串折叠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1127 Solved: 737[Submit][Stat ...
- BZOJ 1090: [SCOI2003]字符串折叠 区间DP
1090: [SCOI2003]字符串折叠 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- [SCOI2003]字符串折叠 (区间DP)
题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS…S(X个S). 如果A = A’, B = ...
- B1090 [SCOI2003]字符串折叠 区间dp
又一道区间dp,和上一篇类似,但是比他简单,这个只有两种转移方法,不是很复杂.直接判断是否为重复的串就行. 题干: Description 折叠的定义如下: . 一个字符串可以看成它自身的折叠.记作S ...
- 洛谷P4302 [SCOI2003]字符串折叠(区间dp)
题意 题目链接 Sol 裸的区间dp. 转移的时候枚举一下断点.然后判断一下区间内的字符串是否循环即可 `cpp #include<bits/stdc++.h> #define Pair ...
- BZOJ1090 [SCOI2003]字符串折叠 区间动态规划 字符串
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1090 题意概括 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S 2. X(S)是X ...
- BZOJ1090: [SCOI2003]字符串折叠
区间dp. 一种是分段dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]); 一种是这一段可以缩写dp[i][j]=min(dp[i][j],dp[i][l]+2+ca ...
- [bzoj1090][SCOI2003]字符串折叠_区间dp
字符串折叠 bzoj-1090 SCOI-2003 题目大意:我说不明白...链接 注释:自己看 想法:动态规划 状态:dp[i][j]表示从第i个字符到第j个字符折叠后的最短长度. 转移:dp[l] ...
- 【洛谷 P4302】 [SCOI2003]字符串折叠(DP)
题目链接 简单区间dp 令\(f[i][j]\)表示\([i,j]\)的最短长度 先枚举区间,然后在区间中枚举长度\(k\),看这个区间能不能折叠成几个长度为\(k\)的,如果能就更新答案. #inc ...
随机推荐
- Linux基础之重定向|grep
重定向 > :覆盖输出>> :追加输出 2> :重定向错误输出2>> : 追加方式 &> : 重定向标准输出或者错误输出 ...
- android GET 请求在5.0版本的取不到数据,报IO异常兼容问题解决
使用lib类库xUtils-2.6.10.jar作为数据请求的框架,在android的5.0版会有兼容问题,取不到GET请求的数据. 但是POST没有问题,难取到数据. public static R ...
- 【2018 Multi-University Training Contest 3】
01:https://www.cnblogs.com/myx12345/p/9420198.html 02: 03: 04:https://www.cnblogs.com/myx12345/p/940 ...
- Memcached Redis相关的干货
为了以后查阅方便,所以转了各位的博文,感谢各位原博主. http://www.searchtb.com/2011/05/redis-storage.html redis内存存储结构 ...
- Python学习之-- IO 操作
阻塞IO / 非阻塞IO /IO多路复用 / 异步IO 说明:同步IO包含(阻塞IO / 非阻塞IO /IO多路复用),因为他们有个共同特性就是都需要内核态到用户态的一个等待. 基本概念解释,环境限定 ...
- hihocoder 1873 ACM-ICPC北京赛区2018重现赛 D Frog and Portal
http://hihocoder.com/problemset/problem/1873 时间限制:1000ms 单点时限:1000ms 内存限制:512MB 描述 A small frog want ...
- codeforces 892E(离散化+可撤销并查集)
题意 给出一个n个点m条边的无向联通图(n,m<=5e5),有q(q<=5e5)个询问 每个询问询问一个边集{Ei},回答这些边能否在同一个最小生成树中 分析 要知道一个性质,就是权值不同 ...
- 还原数据库出现“未获得排他訪问”解决方法(杀死数据库连接的存储过程sqlserver)
在master数据库下创建存储步骤例如以下: createproc killspid (@dbnamevarchar(20)) as begin declare@sqlnvarchar(500) de ...
- java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称而且未指定默认驱动程序解决方法
开发程序须要登录功能 .就不想用大数据库.直接用java连接access. 在自己机器上一切正常, url直连 和配置数据源都没有问题. 公布到windows server2008 上 , ...
- 【转】AOP
原文:http://blog.csdn.net/zhoudaxia/article/details/38502347 .---------------------------------------- ...