【bzoj1068】[SCOI2007]压缩
2017-07-16 20:22
225 查看
给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息。压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位置左边没有M,则从串的开始算起)开始的解压结果(称为缓冲串)。 bcdcdcdcd可以压缩为bMcdRR,下面是解压缩的过程:
另一个例子是abcabcdabcabcdxyxyz可以被压缩为abcRdRMxyRz。
Input
输入仅一行,包含待压缩字符串,仅包含小写字母,长度为n。
Output
输出仅一行,即压缩后字符串的最短长度。
Sample Input
bcdcdcdcdxcdcdcdcd
Sample Output
12
HINT
在第一个例子中,解为aaaRa,在第二个例子中,解为bMcdRRxMcdRR。 【限制】 50%的数据满足:1<=n<=20 100%的数据满足:1<=n<=50 100%的数据满足:1<=n<=50
题解
状态很好想到f[l][r][0/1]f[l][r][0/1]表示区间[l,r][l,r]中有M/无M的最短,这样显然答案为min(f[1]
[0],f[1]
[1])
代码
另一个例子是abcabcdabcabcdxyxyz可以被压缩为abcRdRMxyRz。
Input
输入仅一行,包含待压缩字符串,仅包含小写字母,长度为n。
Output
输出仅一行,即压缩后字符串的最短长度。
Sample Input
bcdcdcdcdxcdcdcdcd
Sample Output
12
HINT
在第一个例子中,解为aaaRa,在第二个例子中,解为bMcdRRxMcdRR。 【限制】 50%的数据满足:1<=n<=20 100%的数据满足:1<=n<=50 100%的数据满足:1<=n<=50
题解
状态很好想到f[l][r][0/1]f[l][r][0/1]表示区间[l,r][l,r]中有M/无M的最短,这样显然答案为min(f[1]
[0],f[1]
[1])
代码
#include<bits/stdc++.h> #define N 500005 #define inf 100000000 #define ll long long using namespace std; inline int read() { int x=0;char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x; } char s[100]; int dp[60][60][2]; int n; bool same(int a,int b) { int l=b-a+1; if(l&1)return 0; for(int i=a;i<=(a+b)/2;i++) if(s[i]!=s[i+l/2])return 0; return 1; } int dfs(int l,int r,int t) { int len=r-l+1; if (len==1) return 1; if (dp[l][r][t]) return dp[l][r][t]; if (t) for (int i=l;i<r;i++) len=min(len,dfs(l,i,1)+dfs(i+1,r,1)+1); for (int i=l;i<r;i++) len=min(len,dfs(l,i,t)+r-i); if (same(l,r)) len=min(len,dfs(l,(l+r)/2,0)+1); dp[l][r][t]=len; return len; } int main() { scanf("%s",s+1);n=strlen(s+1); printf("%d",dfs(1,n,1)); return 0; }
相关文章推荐
- 【bzoj1068】【SCOI2007】压缩
- BZOJ 1068 [SCOI2007]压缩 区间DP
- bzoj1068[SCOI2007]压缩
- bzoj 1068: [SCOI2007]压缩
- 【BZOJ1068】[SCOI2007]压缩【区间DP】
- bzoj 1068: [SCOI2007]压缩 DP
- bzoj1068 [SCOI2007]压缩
- bzoj1068: [SCOI2007]压缩
- bzoj1068:[SCOI2007]压缩
- [BZOJ 1068] [SCOI2007] 压缩 【记忆化搜索】
- BZOJ 1068 [SCOI2007]压缩
- 【BZOJ 1068】[SCOI2007]压缩
- bzoj1068 [SCOI2007]压缩
- 【BZOJ 1068】 [SCOI2007]压缩
- bzoj 1068: [SCOI2007]压缩【区间dp】
- 1068: [SCOI2007]压缩 - BZOJ
- BZOJ1068 [SCOI2007]压缩 【区间dp】
- 【bzoj1068】[SCOI2007]压缩 区间dp
- BZOJ 1068: [SCOI2007]压缩 | 区间DP
- BZOJ 1068: [SCOI2007]压缩 区间DP