Gym 101291A Alphabet
最长上升子序列
找到最长上升的字母的子序列,然后用26减去已经上升的子序列的数量。
AC代码(c++)
#include <iostream>
#include <cstring>
#include<stdio.h>
using namespace std;
int main()
{
char s[51];
int a[51];
gets(s);
int n=strlen(s);
for(int i=0; i<n; i++)
a[i]=s[i]-'a';
int maxlen[52];
maxlen[0]=1;
for(int i=1; i<n; i++)
{
int m=0;
for(int j=0; j<i; j++)
{
if(a[i]>a[j])
{
if(m<maxlen[j])
{
m=maxlen[j];
}
}
maxlen[i]=m+1;
}
}
int m=-1;
for(int i=0; i<n; i++)
{
if(maxlen[i]>m)
m=maxlen[i];
}
cout<<26-m<<endl;
return 0;
}