Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- // dnk transformacija
- int minCost(int a, int b, int c){
- return min(a, min(b, c));
- }
- int main(){
- vector<int> brisi(26,0);
- vector<int> dodadi(26,0);
- cin >> brisi['A'-'A'] >> brisi['C'-'A'] >> brisi['G'-'A'] >> brisi['T'-'A'];
- cin >> dodadi['A'-'A'] >> dodadi['C'-'A'] >> dodadi['G'-'A'] >> dodadi['T'-'A'];
- string s;
- string p;
- cin >> s >> p;
- int m = s.length();
- int n = p.length();
- vector<vector<int> > dp(n+1, vector<int>(m+1,0));
- for(int i = 1; i <= n; i++){
- dp[i][0] = dp[i-1][0] + brisi[p[i-1]-'A'];
- }
- for(int i = 1; i <= m; i++){
- dp[0][i] = dp[0][i-1] + dodadi[s[i-1]-'A'];
- }
- for(int i = 1; i <= n; i++){
- for(int j = 1; j <= m; j++){
- if(p[i-1] == s[j-1]){
- dp[i][j] = dp[i-1][j-1];
- }else{
- int deleteCost = brisi[p[i-1]-'A'];
- int insertCost = dodadi[s[j-1]-'A'];
- int editCost = abs(brisi[p[i-1]-'A'] - brisi[s[j-1]-'A'])
- +abs(dodadi[p[i-1]-'A'] - dodadi[s[j-1]-'A']);
- dp[i][j] = minCost(dp[i][j-1] + insertCost,
- dp[i-1][j] + deleteCost,
- dp[i-1][j-1] + editCost);
- }
- }
- }
- cout << dp[n][m] << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement