Advertisement
thieumao

Code

Jun 15th, 2016
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. const int OO=1e9;
  9.  
  10. int f[111][1111][33];
  11. int a[33][33];
  12. char s[1111];
  13. bool v[111][1111][33];
  14. int k;
  15.  
  16. int main()
  17. {
  18.     int n;
  19.     char x,y;
  20.     int c;
  21.     memset(a,0,sizeof(a));
  22.     memset(f,0,sizeof(f));
  23.     memset(v,0,sizeof(v));
  24.     // nhap s, k
  25.     cin>>(s+1)>>k;
  26.     // nhap n
  27.     cin>>n;
  28.     // duyet n lan de nhap x, y, c
  29.     for (int i=1; i<=n; i++)
  30.     {
  31.         // nhap x, y, c
  32.         cin>>x>>y>>c;
  33.         // chi so a luu x, y; gia tri a luu c
  34.         a[x-'a'][y-'a']=c;
  35.     }
  36.     // len luu chieu dai chuoi s
  37.     int len=strlen(s+1);
  38.    
  39.     // mang 3 chieu:
  40.     // chieu 1: duyet k ki tu thay doi
  41.     // chieu 2: duyet chieu dai ki tu s
  42.     // chieu 3: duyet mang ki tu
  43.     for (int i=0;i<=len;i++)
  44.     {
  45.         for (int j=0;j<26;j++)
  46.         {
  47.             for (int l=0;l<=k;l++)
  48.             {
  49.                 f[l][i][j]=-OO;
  50.             }
  51.         }
  52.     }
  53.    
  54.     // duyet mang chu cai
  55.     for (int i=0;i<26;i++)
  56.     {
  57.         // neu ki tu thu 2 cach a == i
  58.         if (s[1]-'a'==i)
  59.         {
  60.             // khong ki tu nao thay doi
  61.             // 1 ki tu thay doi
  62.             // duyet mang chu cai
  63.             f[0][1][i]=0;
  64.         }
  65.         else
  66.         {
  67.             // 1 ki tu thay doi
  68.            
  69.             f[1][1][i]=0;
  70.         }
  71.     }
  72.    
  73.     for (int i=2; i<=len; i++)
  74.     {
  75.         for (int j=0; j<26; j++)
  76.         {
  77.             if (j==s[i]-'a')
  78.             {
  79.                 for (int l=0; l<=k; l++)
  80.                     for (int t=0; t<26; t++)
  81.                     {
  82.                         f[l][i][j]=max( f[l][i][j], f[l][i-1][t]+a[t][j] );
  83.                     }
  84.                
  85.             }
  86.             else
  87.             {
  88.                 for (int l=1; l<=k; l++)
  89.                     for (int t=0; t<26; t++)
  90.                     {
  91.                         f[l][i][j]=max( f[l][i][j], f[l-1][i-1][t]+a[t][j] );
  92.                     }
  93.             }
  94.         }
  95.     }
  96.    
  97.     // tim max
  98.     int ans=-OO;
  99.     for (int l=0; l<=k; l++)
  100.     {
  101.         for (int j=0; j<26; j++)
  102.         {
  103.             if (f[l][len][j]>ans) ans=f[l][len][j];
  104.         }
  105.     }
  106.     cout<<ans<<endl;
  107.    
  108.     return 0;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement