hdu 4681
来源:互联网 发布:mac间断性声音很大 编辑:程序博客网 时间:2024/05/29 18:41
将c串从a,b串中删去后求最长公子列 直接暴会超时
#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>using namespace std;char a[1010],b[1010],c[1010];int dp1[1010][1010],dp2[1010][1010];int aa[1010],bb[1010];int main(){ int t, ca = 1; scanf("%d",&t); while(t--) { scanf("%s%s%s",a,b,c); memset(dp1, 0, sizeof(dp1)); memset(dp2, 0 , sizeof(dp2)); int len1 = strlen(a), len2 = strlen(b), len3 = strlen(c); for(int i = 1; i <= len1; i++) for(int j = 1; j <= len2; j++) if(a[i-1] == b[j-1]) dp1[i][j] = dp1[i-1][j-1]+1; else dp1[i][j] = max(dp1[i-1][j], dp1[i][j-1]); for(int i = len1; i >= 1; i--) for(int j = len2; j >= 1; j--) if(a[i-1] == b[j-1]) dp2[i][j] = dp2[i+1][j+1]+1; else dp2[i][j] = max(dp2[i+1][j], dp2[i][j+1]); for(int i = 1; i <= len1; i++) { int u = 0, j; for(j = i; j <= len1; j++) { if(c[u] == a[j-1]) u++; if(u == len3) break; } if(j <= len1) aa[i] = j; else aa[i] = 0; } for(int i = 1; i <= len2; i++) { int u = 0, j; for(j = i; j <= len2; j++) { if(c[u] == b[j-1]) u++; if(u == len3) break; } if(j <= len2) bb[i] = j; else bb[i] = 0; } int _max = 0; for(int i = 1; i <= len1; i++) for(int j = 1; j <= len2; j++) if(aa[i] && bb[j]) _max = max(_max, dp1[i-1][j-1]+dp2[aa[i]+1][bb[j]+1]); printf("Case #%d: %d\n",ca++,_max+len3); } return 0;}
- hdu 4681
- hdu 4681
- HDU 4681 String
- HDU 4681 String
- hdu 4681 String
- hdu-4681-String
- hdu 4681 string
- hdu 4681 string
- HDU - 4681 String
- hdu 4681(枚举+dp)
- hdu 4681 String (LCS)
- HDU 4681 String(DP)
- HDU 4681 String
- HDU 4681 String dp
- hdu
- hdu
- HDU
- hdu ()
- linux使用dhclient自动获取IP
- 查看cpu信息
- 如何查看逻辑菜谱和物理cpu个数
- java内存以及堆栈一些自己总结的东西
- Linux system函数返回值
- hdu 4681
- error LNK2001: unresolved external symbol
- 动态库与静态库的创建
- 补.从零开始学习C语言--跨函数使用内存
- HDU1050Moving Tables(贪心,树状数组两种解法)
- HDU 4342 History repeat itself 2012 Multi-University Training Contest 5
- 时间模块常用函数测试
- Eclipse4.2关联javadoc1.6文档问题(安卓手机开发环境)
- 关于java中String 的内存解析