HDU 1159 Common Subsequence(LCS)
阿新 • • 發佈:2018-12-02
當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; }