csu1060_Nearest Sequence

dp问题,相对于两个字符串的比较,三个字符串,只是加了一层循环。

#include 
#include 
#include 
#include 
using namespace std;

const int maxn = 102;
char str1[maxn],str2[maxn],str3[maxn];
int dp[maxn][maxn][maxn];

int main()
{
    while(scanf("%s",str1 + 1) != EOF){
        scanf("%s %s",str2 + 1,str3 + 1);
        memset(dp,0,sizeof(dp));
        int len1 = strlen(str1 + 1);
        int len2 = strlen(str2 + 1);
        int len3 = strlen(str3 + 1);

        for(int i = 1;i <= len1;i ++)
        for(int j = 1;j <= len2;j ++)
        for(int k = 1;k <= len3;k ++){
            if(str1[i] == str2[j] && str2[j] == str3[k])
                dp[i][j][k] = dp[i - 1][j - 1][k - 1] + 1;
            else{
                    int temp1 = dp[i-1][j][k];
                    int temp2 = dp[i][j-1][k];
                    int temp3 = dp[i][j][k-1];
                    dp[i][j][k] = max(max(temp1,temp2),temp3);
                }
        }
        printf("%d\n",dp[len1][len2][len3]);
    }
    return 0;
}


你可能感兴趣的:(dp,csu,dp)