c_cpp dp,三个字符串表示A,B,C给你。检查天气第3个字符串是从字符串A和B交错出来的。例如:A =“abcd”B =“xyz”C =“axybczd”。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp dp,三个字符串表示A,B,C给你。检查天气第3个字符串是从字符串A和B交错出来的。例如:A =“abcd”B =“xyz”C =“axybczd”。相关的知识,希望对你有一定的参考价值。
bool canInterleave(char *a, char *b, char *c) {
if(*a == '\0' && *b == '\0' && *c == '\0') return true;
if(*a == *b) {
if(*a == *c) return canInterleave(a+1, b, c+1) || canInterleave(a, b+1, c+1);
else return false;
}
if(*a == *c) return canInterleave(a+1, b, c+1);
if(*b == *c) return canInterleave(a, b+1, c+1);
}
// DP
bool canInterleave(char *a, char *b, char *c) {
int alen = strlen(a), blen = strlen(b), clen = strlen(c);
if(alen + blen != clen) return false;
if(alen == 0 && blen == 0 && clen == 0) return true;
vector<vector<bool>> dp(alen+1, vector<bool>(blen+1, false));
dp[0][0] = true; //
for(int i=1; i<blen+1; i++) {
if(b[i-1] == c[i-1] && dp[0][i-1]) dp[0][i] = true;
}
for(int i=1; i<alen+1; i++) {
if(a[i-1] == c[i-1] && dp[i-1][0]) dp[i][0] = true;
}
for(int i=1; i<alen+1; i++)
for(int j=1; j<blen+1; j++)
dp[i][j] = a[i-1]==c[i+j-1] && dp[i-1][j] ||
b[j-1]==c[i+j-1] && dp[i][j-1];
return dp[alen][blen];
}
以上是关于c_cpp dp,三个字符串表示A,B,C给你。检查天气第3个字符串是从字符串A和B交错出来的。例如:A =“abcd”B =“xyz”C =“axybczd”。的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 给你一个文本文件太大,不适合内存和3个字符串A,B,C。对于每个字符串,你有一个列出位置o的排序数组
hdu1501 Zipper[简单DP]
状压dp Gym - 100676G
计数dp cf1426f Number of Subsequences
计数dp cf1426f Number of Subsequences
计数dp cf1426f Number of Subsequences