A:因为删除是不计入操作次数的,所以转化一下就是求最长上升子序列,简单dp。

     设dp[i]表示前i个字符能凑成上升子序列的最大长度,dp[i] = max(dp[j]+1, dp[i]) 【j < i && s[j] < s[i]】

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define rep(i,a,b) for(int i = a;i <= b;++ i)
 4 #define per(i,a,b) for(int i = a;i >= b;-- i)
 5 #define mem(a,b) memset((a),(b),sizeof((a)))
 6 #define FIN freopen("in.txt","r",stdin)
 7 #define IO ios_base::sync_with_stdio(0),cin.tie(0)
 8 #define pb push_back
 9 typedef long long LL;
10 typedef pair<int, LL> PIR;
11 const int N = 1e6+5;
12 
13 string s;
14 int dp[105];
15 
16 int main()
17 {
18     //FIN;
19     cin >> s;
20     int len = s.size(), maxn = 0;
21     rep(i, 1, len){
22         dp[i] = 1;
23         rep(j, 1, i-1){
24             if(s[j-1] < s[i-1]) dp[i] = max(dp[j]+1, dp[i]);
25         }
26         maxn = max(maxn, dp[i]);
27     }
28     cout << 26-maxn << endl;
29     return 0;
30 }
View Code

相关文章: