Square words(codevs 3301)
2016-09-18 21:29
375 查看
题目描述 Description
定义square words为:
1.长度为偶数。
2.前一半等于后一半。
比如abcabc和aaaa都是square words,但是abcabcab和aaaaa都不是。
现在有一个长度为n的字符串,求至少要删掉多少个字符,使得剩下的字符串是square words。
输入描述 Input Description
第一行包含一个正整数n。
第二行一个长度为n的字符串,仅包含小写字母
输出描述 Output Description
仅包含一个整数,表示最少需要删掉的字符数
样例输入 Sample Input
11
abaccdaabcd
样例输出 Sample Output
3
数据范围及提示 Data Size & Hint
【样例说明】
abaccdaabcd
【数据规模】
对于40%的数据,n ≤ 20;
对于100%的数据,n ≤ 500。
View Code
定义square words为:
1.长度为偶数。
2.前一半等于后一半。
比如abcabc和aaaa都是square words,但是abcabcab和aaaaa都不是。
现在有一个长度为n的字符串,求至少要删掉多少个字符,使得剩下的字符串是square words。
输入描述 Input Description
第一行包含一个正整数n。
第二行一个长度为n的字符串,仅包含小写字母
输出描述 Output Description
仅包含一个整数,表示最少需要删掉的字符数
样例输入 Sample Input
11
abaccdaabcd
样例输出 Sample Output
3
数据范围及提示 Data Size & Hint
【样例说明】
abaccdaabcd
【数据规模】
对于40%的数据,n ≤ 20;
对于100%的数据,n ≤ 500。
/* ,枚举断点,求最长公共子序列 */ #include<cstdio> #include<cstring> #include<iostream> #define M 510 using namespace std; char s[M],a[M],b[M]; int n,n1,n2,f[M][M],ans; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) cin>>s[i]; for(int k=1;k<n;k++) { memset(f,0,sizeof(f)); n1=0,n2=0; for(int i=1;i<=k;i++) a[++n1]=s[i]; for(int i=k+1;i<=n;i++) b[++n2]=s[i]; for(int i=1;i<=n1;i++) for(int j=1;j<=n2;j++) { if(a[i]==b[j])f[i][j]=max(f[i-1][j-1]+1,f[i] [j]); f[i][j]=max(f[i][j],max(f[i-1][j],f[i][j-1])); ans=max(ans,f[i][j]); } } printf("%d",n-ans*2); return 0; }
View Code
相关文章推荐
- 地下迷宫(bfs输出路径)
- Matlab基本函数-conj函数
- POJ3259-Wormholes(SPFA 判负环)
- spring in action第5章
- 顺序表应用4:元素位置互换之逆置算法
- mongodb导出数据,并解决乱码问题
- Redis 数据类型及抽象
- 第三周项目3-求集合并集
- 切换卡TabHost
- Spark 2.0内幕深度解密
- URL重写:RewriteCond指令与RewriteRule 指令格式
- 动态规划(照明系统设计,uva 11400)
- 种树(codevs 1768)
- poj2411: Mondriaan's Dream
- String s=new String("xyz") 创建了几个对象
- Android总结篇系列:Android Intent
- 前端开发环境及其路线
- 朴素贝叶斯相关概念
- 朴素贝叶斯相关概念
- 朴素贝叶斯相关概念