【BZOJ 1090】[SCOI2003]字符串折叠
来源:互联网 发布:linux 效率工具 编辑:程序博客网 时间:2024/06/08 15:01
题目链接:传送门
题解:
f[l][r]表示将l到r合并成的最小长度,枚举中间点暴力判断是否有循环节即可
//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
- BZOJ 1090: [SCOI2003]字符串折叠
- 【BZOJ 1090】 [SCOI2003]字符串折叠
- bzoj 1090 [SCOI2003]字符串折叠
- 【BZOJ 1090】[SCOI2003]字符串折叠
- BZOJ系列1090《[SCOI2003]字符串折叠》题解
- BZOJ 1090 [SCOI2003]字符串折叠 区间DP
- BZOJ 1090: [SCOI2003]字符串折叠|动态规划
- 【bzoj 1090】[SCOI2003]字符串折叠 区间dp
- [BZOJ]1090: [SCOI2003]字符串折叠 区间DP
- 1090: [SCOI2003]字符串折叠
- BZOJ 1090 SCOI2003 字符串折叠 动态规划+Hash
- BZOJ 1090: [SCOI2003]字符串折叠 区间动归
- 1090: [SCOI2003]字符串折叠 (区间动态规划)
- 1090: [SCOI2003]字符串折叠 区间DP
- 【BZOJ1090 || SCOI2003】字符串折叠
- 【题解】[scoi2003]字符串折叠
- bzoj1090: [SCOI2003]字符串折叠
- bzoj1090[SCOI2003]字符串折叠
- 八皇后问题(C++实现)
- 解决Button无法居中显示字符,特别是Webdings这类图形字符
- spring 全局统一处理异常
- python学习笔记--关于编码
- Python基础:序列
- 【BZOJ 1090】[SCOI2003]字符串折叠
- 数据结构与算法Java版——LCS最长子序列
- 来自一个程序员小白的“呐喊”
- TextInputLayout的简单使用
- yfk
- 用monit监控mongodb和rabbitmq
- codevs 3731 寻找道路
- Centos系统通过tar.gz包安装Mysql5.7
- 【10月31日】机器学习实战(二)决策树:隐形眼镜数据集