-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLuogu_P_1140.cpp
35 lines (35 loc) · 1.19 KB
/
Luogu_P_1140.cpp
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
32
33
34
35
#include <bits/extc++.h>
using namespace std;
namespace pbds = __gnu_pbds;
using ui = unsigned int;
using uli = unsigned long long int;
using li = long long int;
signed constexpr TABLE[5][5] = {
{ 0, -3, -4, -2, -1},
{-3, 5, -1, -2, -1},
{-4, -1, 5, -3, -2},
{-2, -2, -3, 5, -2},
{-1, -1, -2, -2, 5}
};
int main(void) {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
size_t n, m;
string s, t;
cin >> n >> s >> m >> t;
for (char& i : s)
i = i == 'A' ? 1 : i == 'C' ? 2 : i == 'G' ? 3 : i == 'T' ? 4 : throw;
for (char& i : t)
i = i == 'A' ? 1 : i == 'C' ? 2 : i == 'G' ? 3 : i == 'T' ? 4 : throw;
vector<vector<int>> f(n + 1,
vector<int>(m + 1, numeric_limits<int>::min() / 2));
f[0][0] = 0;
for (size_t i = 1; i <= n; ++i) f[i][0] = f[i - 1][0] + TABLE[s[i - 1]][0];
for (size_t i = 1; i <= m; ++i) f[0][i] = f[0][i - 1] + TABLE[0][t[i - 1]];
for (size_t i = 1; i <= n; ++i)
for (size_t j = 1; j <= m; ++j)
f[i][j] = max({f[i - 1][j] + TABLE[s[i - 1]][0],
f[i][j - 1] + TABLE[0][t[j - 1]],
f[i - 1][j - 1] + TABLE[s[i - 1]][t[j - 1]]});
cout << f[n][m];
return 0;
}