Test instructions
Given two strings, A, B, the number of LCS for a, B.
Exercises
In the LCS at the same time calculate the scheme qaq, but stupid I will not, will not, will not ...
Code:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int mod = 1e9 + 7;const int N = 1e3 + 7;int dp[n][n], Sum[n][n];char ch1[n], Ch2[n];int main () {scanf ("%s%s", CH1 + 1, CH2 + 1); int n = strlen (ch1 + 1); int m = strlen (CH2 + 1); for (int i = 0; I <= N; ++i) sum[i][0] = 1;for (int j = 0; J <= M; J + +) Sum[0][j] = 1;for (int i = 1; I <= n; ++i) {for (int j = 1; j <= m; ++j) {if (Dp[i][j] < dp[i-1][j]) {dp[i ][J] = dp[i-1][j];sum[i][j] = sum[i-1][j];} else if (dp[i][j] = = Dp[i-1][j]) {sum[i][j] = (Sum[i][j] + sum[i-1][j])% MoD;} if (Dp[i][j] < dp[i][j-1]) {dp[i][j] = dp[i][j-1];sum[i][j] = sum[i][j-1];} else if (dp[i][j] = = Dp[i][j-1]) {sum[i][j] = (Sum[i][j] + sum[i][j-1])% MoD;} if (ch1[i] = = Ch2[j]) {if (Dp[i][j] < dp[i-1][j-1] + 1) {Dp[i][j] = Dp[i-1][j-1] + 1;sum[i][j] = sum[i-1][j- 1];} else if (dp[i][j] = = Dp[i-1][j-1] + 1) {Sum[i][j] = (Sum[i][j] + sum[i-1][J-1])% mod;}}} printf ("%d\n", Sum[n][m]); return 0;}
Summarize:
A basic DP, I unexpectedly will not qaq, I really for "Zhi several" feel catch urgent ...
Number of LCS