A. Gene

版权声明:未经过同意不得转载 https://blog.csdn.net/qq_42500298/article/details/88095953

在这里插入图片描述
在这里插入图片描述
枚举起始位置,然后向后面贪心匹配,因为T是S的子串,所以从前往后以此判断当前的T[i]是否等于当前的S[i],如果不等则直接加上T[i]的代价加入除了当前字符以外的字符是没有意义的,如果相等则下一个。

#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
int dp[maxn][maxn/2];
int cost[128];
string s,t;
int main()
{
 cin>>s>>t;
 cin>>cost['A']>>cost['C']>>cost['G']>>cost['T'];
 for(int i=1;i<=t.size();i++)
  dp[0][i]=dp[0][i-1]+cost[t[i-1]];
 for(int i=1;i<=s.size();i++)
 {
  for(int j=1;j<=t.size();j++)
  {
   if(s[i-1]!=t[j-1])
    dp[i][j]=dp[i][j-1]+cost[t[j-1]];
   else 
    dp[i][j]=min(dp[i-1][j-1],dp[i][j-1]+cost[t[j-1]]);
  }
 }
 int ans=INT_MAX;
 for(int i=1;i<=s.size();i++)
  ans=min(ans,dp[i][t.size()]);
 cout<<ans<<endl;
 return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42500298/article/details/88095953