标签:eof div int open name put space size 字符串
题意:一个字符串被定义为“alphabetical”,当且仅当它能够删除一些字符,变成“ab...yz”,给你一个只由小写字母组成的字符串,问你最少插入几个字母,使它变成“alphabetical”的。
f(i,j)表示前i个字母,以j为结尾时,最少要插入几个字母。
f(i,j)=min{f(i-1,k)+j-k+(s[i]>k && s[i]<=j) (‘a‘-1<=k<j) , f(i-1,j)}。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int f[55][205]; char a[55]; int n; int main(){ // freopen("a.in","r",stdin); scanf("%s",a+1); n=strlen(a+1); memset(f,0x7f,sizeof(f)); for(int i=‘a‘;i<=‘z‘;++i){ f[0][i]=i-‘a‘+1; } for(int i=0;i<=n;++i){ f[i][‘a‘-1]=0; } for(int i=1;i<=n;++i){ for(int j=‘a‘;j<=‘z‘;++j){ for(int k=‘a‘-1;k<j;++k){ f[i][j]=min(f[i][j],f[i-1][k]+j-k-(a[i]>k && a[i]<=j)); } f[i][j]=min(f[i][j],f[i-1][j]); // printf("%d ",f[i][j]); } // puts(""); } printf("%d\n",f[n][‘z‘]); return 0; }
【动态规划】Gym - 101201A - Alphabet
标签:eof div int open name put space size 字符串
原文地址:http://www.cnblogs.com/autsky-jadek/p/7634825.html