【bzoj1068】[SCOI2007]压缩
来源:互联网 发布:如何在mac上玩dota2 编辑:程序博客网 时间:2024/06/05 04:48
题目链接:传送门
题解:
f[l][r][0/1]表示l到r是否使用M能压缩成的最小值,记忆化搜索,比较麻烦
//by sdfzchy#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int inf=(1<<30),N=100010,mod=1e9+7;int n,m;inline int in(){ char tmp=getchar(); int res=0,f=1; while((tmp<'0'||tmp>'9')&&tmp!='-')tmp=getchar(); if(tmp=='-') f=-1,tmp=getchar(); while(tmp>='0'&&tmp<='9') res=(res<<1)+(res<<3)+(tmp^48),tmp=getchar(); return res*f;}int f[120][120];char s[120];int cal(int x){ int ret=0; while(x) ret++,x/=10; return ret;}bool ok(int l,int r,int k){ for(int i=k+1;i<=r;i++) if(s[l+(i-l)%(k-l+1)]!=s[i]) return 0; return 1;}int main(){ scanf("%s",s+1); n=strlen(s+1); for(int i=1;i<=n;i++) f[i][i]=1; for(int i=1;i<n;i++) for(int l=1,r=l+i;r<=n;l++,r++) { f[l][r]=r-l+1; for(int k=l;k<r;k++) { f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]); if((r-k)%(k-l+1)==0&&ok(l,r,k)) f[l][r]=min(f[l][r],f[l][k]+2+cal((r-l+1)/(k-l+1))); } } printf("%d",f[1][n]); return 0;}
阅读全文
0 0
- bzoj1068: [SCOI2007]压缩
- bzoj1068[SCOI2007]压缩
- 【bzoj1068】[SCOI2007]压缩
- 【bzoj1068】[SCOI2007]压缩
- 【BZOJ1068】[SCOI2007]压缩【区间DP】
- 【bzoj1068】[SCOI2007]压缩 区间dp
- [bzoj1068][SCOI2007]压缩 区间dp
- [BZOJ1068][SCOI2007]压缩(区间DP)
- bzoj1068 [SCOI2007]压缩(区间DP)
- bzoj1068压缩
- BZOJ1068
- bzoj1068(区间dp,字符串压缩)
- [bzoj][SCOI2007]压缩
- 【BZOJ 1068】 [SCOI2007]压缩
- BZOJ 1068 [SCOI2007]压缩
- [SCOI2007]压缩 区间dp
- 1068: [SCOI2007]压缩
- [SCOI2007]压缩 (洛谷2470)
- MyBatis的一个小程序(购物系统)
- 条件判断字符串(队列实现)
- Unity手游引擎安全解析及实践
- 第九周——项目三—用二叉树遍历思想解决问题
- 堆栈和内存分配
- 【bzoj1068】[SCOI2007]压缩
- jQuery之DOM操作详细
- LintCode_212_空格替换
- 数据分析之Pandas-05数据加载
- 自定义TextView,在values下面新建attrs.xml,布局,重写方法
- 解决:“无法打开虚拟机,该虚拟机似乎正在被使用”
- redhat-learn
- 十月英语
- 2017年福州CCF CCSP参赛体会