Advertisement
despotovski01

DNK Transformacija

May 10th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. // dnk transformacija
  4. int minCost(int a, int b, int c){
  5.     return min(a, min(b, c));
  6. }
  7.  
  8.  
  9. int main(){
  10.     vector<int> brisi(26,0);
  11.     vector<int> dodadi(26,0);
  12.     cin >> brisi['A'-'A'] >> brisi['C'-'A'] >> brisi['G'-'A'] >> brisi['T'-'A'];
  13.     cin >> dodadi['A'-'A'] >> dodadi['C'-'A'] >> dodadi['G'-'A'] >> dodadi['T'-'A'];
  14.  
  15.     string s;
  16.     string p;
  17.     cin >> s >> p;
  18.  
  19.     int m = s.length();
  20.     int n = p.length();
  21.     vector<vector<int> > dp(n+1, vector<int>(m+1,0));
  22.     for(int i = 1; i <= n; i++){
  23.         dp[i][0] = dp[i-1][0] + brisi[p[i-1]-'A'];
  24.     }
  25.     for(int i = 1; i <= m; i++){
  26.         dp[0][i] = dp[0][i-1] + dodadi[s[i-1]-'A'];
  27.     }
  28.  
  29.     for(int i = 1; i <= n; i++){
  30.         for(int j = 1; j <= m; j++){
  31.             if(p[i-1] == s[j-1]){
  32.                 dp[i][j] = dp[i-1][j-1];
  33.             }else{
  34.                 int deleteCost = brisi[p[i-1]-'A'];
  35.                 int insertCost = dodadi[s[j-1]-'A'];
  36.                 int editCost = abs(brisi[p[i-1]-'A'] - brisi[s[j-1]-'A'])
  37.                             +abs(dodadi[p[i-1]-'A'] - dodadi[s[j-1]-'A']);
  38.  
  39.                 dp[i][j] = minCost(dp[i][j-1] + insertCost,
  40.                                    dp[i-1][j] + deleteCost,
  41.                                    dp[i-1][j-1] + editCost);
  42.  
  43.             }
  44.         }
  45.     }
  46.  
  47.     cout << dp[n][m] << endl;
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement