BZOJ1090: [SCOI2003]字符串折叠
2016-06-23 21:41
459 查看
区间dp.
一种是分段dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
一种是这一段可以缩写dp[i][j]=min(dp[i][j],dp[i][l]+2+calc((j-i+1)/(l-i+1)));
calc表示计算十进制的位数
边界就是l==r f[l][r]=1
View Code
Submit: 1046 Solved: 680
[Submit][Status][Discuss]
一种是分段dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
一种是这一段可以缩写dp[i][j]=min(dp[i][j],dp[i][l]+2+calc((j-i+1)/(l-i+1)));
calc表示计算十进制的位数
边界就是l==r f[l][r]=1
#include<bits/stdc++.h> using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } char s[120]; int f[120][120]; #define inf 1e9 bool judge(int l,int k,int r){ int tmp=0; for(int i=k+1;i<=r;i++){ if(s[l+tmp]!=s[i])return 0; tmp=tmp+1%(k-l+1); } return 1; } int calc(int x){ int tmp=0; while(x){ tmp++;x/=10; } return tmp; } int dp(int l,int r){ if(l==r)return 1; if(f[l][r])return f[l][r]; int t=r-l+1; for(int k=l;k<r;k++)t=min(t,dp(l,k)+dp(k+1,r)); for(int k=l;k<r;k++)if((r-l+1)%(k-l+1)==0&&judge(l,k,r))t=min(t,2+dp(l,k)+calc((r-l+1)/(k-l+1))); return f[l][r]=t; } int main(){ scanf("%s",s); int l=strlen(s); printf("%d\n",dp(0,l-1)); return 0; }
View Code
1090: [SCOI2003]字符串折叠
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1046 Solved: 680
[Submit][Status][Discuss]
Description
折叠的定义如下: 1. 一个字符串可以看成它自身的折叠。记作S S 2. X(S)是X(X>1)个S连接在一起的串的折叠。记作X(S) SSSS…S(X个S)。 3. 如果A A’, BB’,则AB A’B’ 例如,因为3(A) = AAA, 2(B) = BB,所以3(A)C2(B) AAACBB,而2(3(A)C)2(B)AAACAAACBB 给一个字符串,求它的最短折叠。例如AAAAAAAAAABABABCCD的最短折叠为:9(A)3(AB)CCD。Input
仅一行,即字符串S,长度保证不超过100。Output
仅一行,即最短的折叠长度。Sample Input
NEERCYESYESYESNEERCYESYESYESSample Output
14HINT
一个最短的折叠为:2(NEERC3(YES))相关文章推荐
- 主键生成策略
- 在MVC里使用 HttpContext.Response输出内容
- Npoi操作excel
- Context应用场景
- 项目-二进制文件浏览器
- 查找之二叉树查找
- 背包问题
- 通过脚本测试ubuntu的源
- linux文件查找命令之find详解
- ElasticSearch Java Api -检索索引库
- Java注解
- C++概述
- python-implement global var using attr of function
- js 图片预加载
- windows下java环境变量配置
- BZOJ1861: [Zjoi2006]Book 书架
- Android中Log的简单封装
- html5+canvas实现图片的压缩上传
- c语言中如何判断一个数组是递增数组
- 【转】FPGA内部小数计算