标签:
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 8539 | Accepted: 4048 |
Description
Input
Output
Sample Input
bf
Sample Output
55
Source
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define ll long long #define N 110 char s[N]; ll bit[N]; ll dp[N][N]; ll dfs(ll pos,ll mx,bool limit,bool fzero) { if(pos==-1) return 1; if(!limit && !fzero && dp[pos][mx]!=-1) return dp[pos][mx]; ll end=limit?bit[pos]:26; ll ans=0; for(ll i=fzero?0:mx; i<=end; i++) { ans+=dfs(pos-1,i+1,limit && i==end,fzero && !i); } if(!limit && !fzero) dp[pos][mx]=ans; return ans; } ll cal() { ll len=strlen(s+1); for(ll i=1; i<=len; i++) { bit[len-i]=s[i]-‘a‘+1; } return dfs(len-1,0,1,1); } int main() { memset(dp,-1,sizeof(dp)); while(scanf("%s",s+1)!=EOF) { int flag=1; int len=strlen(s+1); for(int i=1; i<len; i++) { if(!(s[i]<s[i+1])) { flag=0; break; } } if(!flag) printf("0\n"); else printf("%lld\n",cal()-1); } return 0; }
标签:
原文地址:http://www.cnblogs.com/hate13/p/4452047.html