题目: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的更多相关文章

  1. 【BZOJ-1090】字符串折叠 区间DP + Hash

    1090: [SCOI2003]字符串折叠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1127  Solved: 737[Submit][Stat ...

  2. BZOJ 1090: [SCOI2003]字符串折叠 区间DP

    1090: [SCOI2003]字符串折叠 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  3. [SCOI2003]字符串折叠 (区间DP)

    题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS…S(X个S). 如果A = A’, B = ...

  4. B1090 [SCOI2003]字符串折叠 区间dp

    又一道区间dp,和上一篇类似,但是比他简单,这个只有两种转移方法,不是很复杂.直接判断是否为重复的串就行. 题干: Description 折叠的定义如下: . 一个字符串可以看成它自身的折叠.记作S ...

  5. 洛谷P4302 [SCOI2003]字符串折叠(区间dp)

    题意 题目链接 Sol 裸的区间dp. 转移的时候枚举一下断点.然后判断一下区间内的字符串是否循环即可 `cpp #include<bits/stdc++.h> #define Pair ...

  6. BZOJ1090 [SCOI2003]字符串折叠 区间动态规划 字符串

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1090 题意概括 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S 2. X(S)是X ...

  7. 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 ...

  8. [bzoj1090][SCOI2003]字符串折叠_区间dp

    字符串折叠 bzoj-1090 SCOI-2003 题目大意:我说不明白...链接 注释:自己看 想法:动态规划 状态:dp[i][j]表示从第i个字符到第j个字符折叠后的最短长度. 转移:dp[l] ...

  9. 【洛谷 P4302】 [SCOI2003]字符串折叠(DP)

    题目链接 简单区间dp 令\(f[i][j]\)表示\([i,j]\)的最短长度 先枚举区间,然后在区间中枚举长度\(k\),看这个区间能不能折叠成几个长度为\(k\)的,如果能就更新答案. #inc ...

随机推荐

  1. bzoj 1432 [ZJOI2009]Function 思想

    [bzoj1432][ZJOI2009]Function Description Input 一行两个整数n; k. Output 一行一个整数,表示n 个函数第k 层最少能由多少段组成. Sampl ...

  2. selenide01---截图

    1.junit:import com.codeborne.selenide.junit.ScreenShooter; @Rule public ScreenShooter makeScreenshot ...

  3. [USACO13NOV]空荡荡的摊位Empty Stalls

    题目描述 Farmer John's new barn consists of a huge circle of N stalls (2 <= N <= 3,000,000), numbe ...

  4. Maven 手动添加本地jar包

    mvn install:install-file -Dfile=jar绝对路径 -DgroupId=项目组织唯一的标识符 -DartifactId=项目的唯一的标识符 -Dversion=jar版本 ...

  5. python学习之-- redis模块操作 集合和有序集合

    redis 模块操作之 集合set和有序集合zset Set 集合操作,不允许重复的列表sadd(name,value):name对应的集合中添加元素scard(name):获取name对应的集合中元 ...

  6. 阿里oss上传图片react组件alioss-react,vue组件alioss-vue (不用我先收藏着,后端看下前端处理方法)

    1.介绍 最近开发了一个项目,其中需要一个上传图片到阿里云的 oss 上面,就是上传图片到阿里云的 oss 上面. 因为之前开发过 vue 的阿里云 oss 上传,所以直接复制粘 vue 的组件. 因 ...

  7. VC++ error C1083 无法打开包括文件 fstream.h,iostream.h怎么办

    1 如下图所示,VS中不支持iostream.h和fstream.h的说法   2 改成下面三行就可以编译通过了 #include<iostream> #include <fstre ...

  8. 程序运行中(BSS段、数据段、代码段、堆栈)

    程序运行中(BSS段.数据段.代码段.堆栈) BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简 ...

  9. java 配置时遇到的问题及解决办法

    1. 最近JDK更新很频繁,以至于我安装时版本太多,选择也会出现问题 首先,确定你选择的是32位版本还是64位版本(貌似64位系统下也可以安装32位的JDK), 这个相当重要,因为这个会影响到ecli ...

  10. 手把手教你_怎么找android应用的包名和启动activity

    自己主动化測试中常常遇到这个问题,关于这个题目,方法众多,咱的目的是找个比較简单靠谱的: 方法一: 先进入cmd窗体,adb shell 后: cd /data/data ls 能够看到包名了吧,缺点 ...