BZOJ 1090 [SCOI2003]字符串折叠 区间DP
来源:互联网 发布:领导力的文书 知乎 编辑:程序博客网 时间:2024/05/29 09:23
题意:链接
方法:区间DP
解析:zxr讲完这道题好几天后我来撸这个。
只记得是什么区间DP?
好,然后我抱着做SB题的内心来做这道题。
这道题是SB题,这道题是SB题,这道题是SB题,恩重要的话说三遍。
f[i][j]表示i到j折叠最小的长度。
转移就是个逗比。
枚举中间点K,
一种是i~k不能成为k+1~j的循环节,那么直接加和
一种是i~k能成为k+1~j的循环节,则可以加和或者折叠,更新最优值。
就那个判断能否成为循环节我调了半天…
太弱了RRRR!
最后还因为循环节个数忘加了本身而被一百个A这种数据卡了!
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;char s[110];int f[110][110];int flag;void check(int l,int p,int r){ if((r-p)%(p-l+1)!=0)return; int lenth=p-l+1; for(int i=p+1;i<=r;i++) { if(s[i]!=s[(i-l)%lenth+l])return; } flag=1;}int main(){ memset(f,0x3f,sizeof(f)); scanf("%s",s+1); int len=strlen(s+1); for(int i=1;i<=len;i++)f[i][i]=1; for(int l=2;l<=len;l++) { for(int i=1;i+l-1<=len;i++) { int j=i+l-1; for(int k=i;k<j;k++) { f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]); flag=0; check(i,k,j); if(flag) { int tmp=f[i][k]+2; int bit=(j-k)/(k-i+1)+1; while(bit)bit/=10,tmp++; f[i][j]=min(f[i][j],tmp); } } } } printf("%d\n",f[1][len]); }
0 0
- BZOJ 1090 [SCOI2003]字符串折叠 区间DP
- 【bzoj 1090】[SCOI2003]字符串折叠 区间dp
- [BZOJ]1090: [SCOI2003]字符串折叠 区间DP
- 1090: [SCOI2003]字符串折叠 区间DP
- BZOJ 1090: [SCOI2003]字符串折叠 区间动归
- BZOJ 1090: [SCOI2003]字符串折叠
- 【BZOJ 1090】 [SCOI2003]字符串折叠
- bzoj 1090 [SCOI2003]字符串折叠
- 【BZOJ 1090】[SCOI2003]字符串折叠
- 【BZOJ1090】[SCOI2003]字符串折叠【区间DP】
- BZOJ1090: [SCOI2003]字符串折叠 区间DP
- 【BZOJ1090】【SCOI2003】字符串折叠 {区间dp}
- BZOJ1090(SCOI2003)[字符串折叠]--区间DP
- 1090: [SCOI2003]字符串折叠 (区间动态规划)
- BZOJ系列1090《[SCOI2003]字符串折叠》题解
- BZOJ 1090: [SCOI2003]字符串折叠|动态规划
- 1090: [SCOI2003]字符串折叠
- bzoj1090: [SCOI2003]字符串折叠 dp
- hdu 5305 Friends(2015多校第二场第6题)记忆化搜索
- 动态代理
- Jetson TK1
- 红枣银耳莲子汤
- 第二章(变量,数据类型和变量名,数据输入)
- BZOJ 1090 [SCOI2003]字符串折叠 区间DP
- 七月二十二日 Linux操作系统c语言学习笔记
- Lightoj 1088 - Points in Segments 【二分】
- Tempter of the Bone(DFS+剪枝)
- 如何编译得到64bit version的opencv2.2.0(opencv2.1)
- hibernate 4.2.5 properties
- struts 拦截器入门&执行流程
- Scala语言中基于Actor的并发编程的机制初步
- AudioRecord工作流程(蓝牙a2dp的状态下)