#include <stdio.h>
#include <algorithm>
int main()
{
int n, m, q;
char s[3001];
char t[3001];
scanf("%d%d%d", &n, &m, &q);
scanf("%s%s", s, t);
while (q--)
{
int i, j, k, l;
static int DP[3001][3001];
scanf("%d%d%d%d", &i, &j, &k, &l);
for (int it1 = 0; i + it1 <= j; it1++)
for (int it2 = 0; k + it2 <= l; it2++)
if (s[i + it1-1] == t[k + it2-1])
DP[it1+1][it2+1] = DP[it1][it2] + 1;
else
DP[it1+1][it2+1] = std::max(DP[it1+1][it2], DP[it1][it2+1]);
printf("%d\n", DP[j-i+1][l-k+1]);
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <stdio.h> #include <algorithm> int main() { int n, m, q; char s[3001]; char t[3001]; scanf("%d%d%d", &n, &m, &q); scanf("%s%s", s, t); while (q--) { int i, j, k, l; static int DP[3001][3001]; scanf("%d%d%d%d", &i, &j, &k, &l); for (int it1 = 0; i + it1 <= j; it1++) for (int it2 = 0; k + it2 <= l; it2++) if (s[i + it1-1] == t[k + it2-1]) DP[it1+1][it2+1] = DP[it1][it2] + 1; else DP[it1+1][it2+1] = std::max(DP[it1+1][it2], DP[it1][it2+1]); printf("%d\n", DP[j-i+1][l-k+1]); } return 0; } |
English