题意:给两个串S和T,要使得S包含T(subsequence),最少修改S几次。(lenS>lenT)
相同时贪心的不改即可,
不相同时,选择改或者不改,改即dp[i][j]=dp[i-1][j-1]+1,不改即dp[i][j]=dp[i-1][j],注意边界:j=0,以及j>i.
#include<bits/stdc++.h>
using namespace std;
int dp[1005][1005];
int main(){
string s,t;cin>>s>>t;
int ls=s.length(),lt=t.length();
for(int i=0;i<=ls;i++)for(int j=0;j<=lt;j++)dp[i][j]=87654321;
for(int i=0;i<=ls;i++)dp[i][0]=0;
for(int i=1;i<=ls;i++){
for(int j=1;j<=i;j++){
if(s[i-1]==t[j-1])dp[i][j]=dp[i-1][j-1];
else {
dp[i][j]=min(dp[i-1][j-1]+1,dp[i-1][j]);
}
}
}
cout<<dp[ls][lt];
return 0;
}
/*
ADSADSDSA
DSADASD
ADDDDABCA
XABAD
A
A
A
B
AB
BA
*/
放不开写,一遇到稍微边界和注意的地方多的时候场上就不敢想不敢写...