标签:
还是很想说
数位dp真的很方便!!!
数位dp真的很方便!!!
数位dp真的很方便!!!
重要的事说三遍
该题转换规则跟进制差不多 到z时进一位 如az下位为bc 上位必须比下位小
根据这个规则搜出所有情况即可
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int dp[11][27]; int digit[11]; /* 1~26表示加的字母 0表示不加 有前导时 枚举pre+1 ~ 26-pos 没有的话枚举 0 ~ 26-pos */ int dfs(int pos,int pre,bool high) { if(pos == -1) return pre > 0; if(!high && ~dp[pos][pre]) return dp[pos][pre]; int i,en,ans = 0,st; en = high? digit[pos]: 26-pos; st = pre? pre+1: 0; for(i = st; i <= en; ++i) ans += dfs(pos-1,i,high && i == en); if(!high) dp[pos][pre] = ans; return ans; } int Solve(char *str) { int i,len = strlen(str); for(i = 0; i < len; ++i) { digit[i] = str[len-i-1]-'a'+1; } return dfs(len-1,-1,1); } int main() { memset(dp,-1,sizeof(dp)); char str[11],i; scanf("%s",str); for(i = 0; str[i+1]; ++i) { if(str[i] >= str[i+1]) { puts("0"); return 0; } } printf("%d\n",Solve(str)); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/challengerrumble/article/details/47780719