SCP-bzoj-1090
项目编号:bzoj-1090
项目等级:Safe
项目描述:
特殊收容措施:
区间DP。设计状态f[i][j]表示压缩从第i位到第j位的字符串所需的最小长度。转移方式有三种:
•初始化:j-i+1->f[i][j]
•区间分割:f[i][k]+f[k+1][j]->f[i][j]
•子串复制(前提:子串i~j可分成长度为k的多个相同子串):f[i][i+k-1]+digit(k)+2->f[i][j](digit(x)表示x的十进制位数)
总复杂度O(n2(σ2(n)+n))。
附录:
#include <bits/stdc++.h>
#define range(i,c,o) for(register int i=(c);i<(o);++i)
using namespace std; char str[];
inline bool judge(const int&L,const int&R,const int&K)
{
range(i,,K) for(int j=L+i;j+K<=R;j+=K)
{
if(str[j]!=str[j+K]) return ;
}
return ;
} int f[][];
int main()
{
int N=strlen(gets(str));
range(L,,N) range(R,L,N) f[L][R]=R-L+;
range(len,,N+) range(L,,N-len+)
{
int R=L+len-;
range(i,,int(sqrt(len))+) if(len%i==)
{
int x=i,y=len/i;
if(judge(L,R,x)) f[L][R]=min(f[L][R],f[L][L+x-]+int(log10(y))+);
if(judge(L,R,y)) f[L][R]=min(f[L][R],f[L][L+y-]+int(log10(x))+);
}
range(i,L,R) f[L][R]=min(f[L][R],f[L][i]+f[i+][R]);
}
return printf("%d\n",f[][N-]),;
}
SCP-bzoj-1090的更多相关文章
- BZOJ 1090: [SCOI2003]字符串折叠
Sol 区间DP. 转移很简单,枚举会形成的断长转移就行,话说上一题我就跟这个是差不多的思路,转移改了改,然后死活过不了... 同样都是SCOI的题...相差4年... Code /********* ...
- bzoj 1090 [SCOI2003]字符串折叠(区间DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1090 [题意] 给定一个字符串,问将字符串折叠后的最小长度. [思路] 设f[i][j ...
- BZOJ 1090: [SCOI2003]字符串折叠 区间DP
1090: [SCOI2003]字符串折叠 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 1090 字符串折叠(区间DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1090 题意:字符串AAAAAAAAAABABABCCD的最短折叠为9(A)3(AB)CC ...
- 【BZOJ 1090】[SCOI2003]字符串折叠
Description 折 叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S S 2. X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) SSSS…S(X个S). ...
- BZOJ 1090 字符串折叠(Hash + DP)
题目链接 字符串折叠 区间DP.$f[l][r]$为字符串在区间l到r的最小值 正常情况下 $f[l][r] = min(f[l][r], f[l][l+k-1]+f[l+k][r]);$ 当$l$到 ...
- bzoj 1090: [SCOI2003]字符串折叠【区间dp】
设f[i][j]为区间(i,j)的最短长度,然后转移的话一个是f[i][j]=min(j-i+1,f[i][k]+f[k+1][j]),还有就是把(k+1,j)合并到(i,k)上,需要判断一下字符串相 ...
- bzoj 1090 字符串折叠
题目大意: 折叠的定义如下: 1. 一个字符串可以看成它自身的折叠.2. X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S)=SSSS…S(X个S). 3. 如果A=A’, B=B’, ...
- 洛谷 4302 BZOJ 1090 SCOI2003 字符串折叠 UVA1630 Folding(输出方案版)
[题解] 区间DP. 设f[i][j]表示i~j的最小代价.再枚举中间点k,很容易想到转移方程为f[i][j]=min(f[i][j],f[i][k]+f[k][j]),同时如果i~k可以通过重复获 ...
- BZOJ 1090 - 区间dp
Magic Door 题目大意: 给一个字符串,可以将重复的串缩成x(a),表示x个a,求能缩成的最小长度. 题目分析 区间dp: dp[i][j]表示i~j处理后的最小长度, 则有 \[dp[i][ ...
随机推荐
- MIS(管理信息系统)
MIS 管理信息系统(Management Information System,简称MIS) 是一个以人为主导,利用计算机硬件.软件.网络通信设备以及其他办公设备,进行信息的收集.传输.加工.储存. ...
- window 2008/2012计划任务配置
很多人在问我: 1.Windows Server 2008 计划任务在哪里配置? 2.Windows Server 2008 可以配置每分钟或是每小时执行我的任务吗? 答案是:可以! 首先Window ...
- js中forEach,for in,for of循环的用法
from:https://www.cnblogs.com/amujoe/p/8875053.html 一.一般的遍历数组的方法: var array = [1,2,3,4,5,6,7]; for (v ...
- JS删除对象属性
项目中有些属性使用之后需要重置 var user = {}; user.name = "123"; user.age="30"; console.log(use ...
- Nginx+Tomcat Session 无效问题
omcat 和 Nginx 是相互独立的,在创建 Session 的时候,会根据部署的 Path 作为 Session Cookie 的 Path 路径,原则就是解决 Session Path 路径问 ...
- Springboot01-web
Springboot快速构建 访问http://start.spring.io 构建springboot项目,这里选择版本2.0.4 单击Generate Project按钮下载springboot ...
- javaIO流(一)--File类的基本使用
一.File文件操作类 在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创 ...
- Git文件操作命令
添加文件 git add 添加指定文件: git add test.txt Test.java 添加所有文件: git add . 取消添加文件 git reset HEAD – filename g ...
- Codeforces 1140C(贪心+堆)
题面 传送门 题意: 给出长度为n的序列b,t,定义一个子序列的值为\(\min\{ b_i\} \times \sum t_i\),求所有子序列中值最大的一个,输出最大值 分析 假如固定某个b[i] ...
- NOIP2015D1T2 信息传递
题目描述 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 Ti 的同学. 游戏开始时,每人都只 ...