1. 程式人生 > >HDU 1159 Common Subsequence(LCS)

HDU 1159 Common Subsequence(LCS)

當s1[s]=s2[t]時,在公共子串末尾加上s1[s]

當s1[s]!=s2[t]時,s1當前長度減1與s2比;s2當前長度減1與s1比

if (s1[s] == s2[t]) {
                dp[s+1][t+1] = dp[s][t] + 1;
            } else {
                dp[s+1][t+1] = max(dp[s][t+1], dp[s+1][t]);
            }



具體如下

#include<stdio.h>
#include<string.h>


char s1[1005], s2[1005];
int dp[1005][1005];
int max(int a, int b) {
    return a>b?a:b;
}

void solve() {
    for (int s = 0; s < strlen(s1); s++) {
        for (int t = 0; t < strlen(s2); t++) {
            if (s1[s] == s2[t]) {
                dp[s+1][t+1] = dp[s][t] + 1;
            } else {
                dp[s+1][t+1] = max(dp[s][t+1], dp[s+1][t]);
            }
        }
    }

    printf("%d\n", dp[strlen(s1)][strlen(s2)]);
}



int main(void)
{
    while (scanf("%s %s", s1, s2) != EOF) {
            memset(dp, 0, sizeof(dp));
            solve();
    }

    return 0;
}