首页 > 代码库 > 【POJ 1850】 Code
【POJ 1850】 Code
【POJ 1850】 Code
还是非常想说
数位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; }
【POJ 1850】 Code
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。