UVA - 10069 Distinct Subsequences 不同子序列
2014-11-14 14:57
387 查看
题目大意:给出两个字符串,要求求出字符串1的有多少的子串是字符串2
解题思路:这题的数据很大,高达10^100,得用大数据的加法,用dp[i][j]表示长度为j的字符串有多少种表示长度为i的字符串,那样就可推出转换方程
1.如果长度为i的字符串的最后一个字符和长度为j的字符串的最后一个字符相同的话,则dp[i][j] = dp[i][j-1]+dp[i-1][j-1]
2.如果不相同的话,dp[i][j] = dp[i][j-1]
解题思路:这题的数据很大,高达10^100,得用大数据的加法,用dp[i][j]表示长度为j的字符串有多少种表示长度为i的字符串,那样就可推出转换方程
1.如果长度为i的字符串的最后一个字符和长度为j的字符串的最后一个字符相同的话,则dp[i][j] = dp[i][j-1]+dp[i-1][j-1]
2.如果不相同的话,dp[i][j] = dp[i][j-1]
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxn 10005 char dp[105][10005][105]; char a[maxn]; char b[105]; int len1,len2; void add(char *c,char *a,char *b) { int l1 = strlen(a); int l2 = strlen(b); int l3 = max(l1,l2); memset(c,0,sizeof(c[0])*(l3+2)); for(int i = l1 - 1,j = l3; i >= 0; i--,j--) c[j] += a[i] - '0'; for(int i = l2 - 1,j = l3; i >= 0; i--,j--) c[j] += b[i] - '0'; for(int i = l3; i > 0 ;c[i] = c[i] + '0',i--) if(c[i] > 9) { c[i] -= 10; c[i-1]++; } if(!c[0]) { for(int i = 0; i < l3; i++) c[i] = c[i+1]; c[l3] = 0; } else c[0] = '1'; } int main() { int test; scanf("%d", &test); while(test--){ scanf("%s%s",a,b); len1 = strlen(a); len2 = strlen(b); for(int i = 0 ; i <= len1; i++) strcpy(dp[0][i],"1"); for(int i = 1; i <= len2; i++) for(int j = i; j <= len1; j++) if(b[i-1] == a[j-1]) add(dp[i][j],dp[i][j-1],dp[i-1][j-1]); else strcpy(dp[i][j],dp[i][j-1]); printf("%s\n",dp[len2][len1]); } return 0; }
相关文章推荐
- uva 10069 Distinct Subsequences 不同的序列
- UVa Problem 10069 Distinct Subsequences (不同的子序列)
- UVA 10069
- 分析按键序列以执行不同功能。但又从中抽象出来一个,暂时不知道还能用作别的不。
- Windows10-UWP中设备序列显示不同XAML的三种方式[3]
- uva 10069 - Distinct Subsequences
- UVA 103 Stacking Boxes(最长增长子序列变形)
- UVa 111 - History Grading 最长递增子序列 LIS
- 回文串和镜像串,组合不同,下标为何*2 。 UVA 401 Palindromes 回文词
- UVAlive 3602 DNA序列(计数+瞎搞)
- Ducci序列(Ducci Sequence ,UVa1594)
- 轻松解决不同关键字序列构成的二叉排序树ASL(平均查找长度)(成功)不同问题
- uva10051(最长上升子序列 + 路径打印)
- UVa 437 The Tower of Babylon(DP 最长条件子序列)
- HDU 5869 求区间中不同连续序列的gcd的个数(树状数组)
- DNA序列(DNA Consensus String, ACM/ICPC seoul 2006, UVa 1368)
- UVA - 10534 Wavio Sequence 波浪序列 { LIS - O(n*log n)}
- UVa 10534 波浪子序列(快速求LIS)
- 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
- 算法竞赛入门-习题3-9 子序列(All in All, UVa 10340)