poj 1850 Code
2013-07-09 09:34
323 查看
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[33][33];//表示的是长度为i + 1, 第一个字母为j + ‘a' 的串总共有多少个。 int sum[33]; void getdp() { int i, j, k; memset(dp, 0, sizeof(dp)); memset(sum, 0, sizeof(sum));//记录长度为i + 1 的所有串的个数。 for(i = 0; i < 26; i ++) { dp[0][i] = 1; sum[0] += dp[0][i]; } for(i = 1; i < 26; i ++) { for(j = 0; j < 26; j ++) { for(k = j + 1; k < 26; k ++) { dp[i][j] += dp[i - 1][k];//递推公式。每一项都可以由第二个字母位置满足条件的字母情况的和求得。 } sum[i] += dp[i][j]; } } } int main() { char ch[13]; int l, i, j, ans, flag; getdp();//初始化。 while(cin >> ch) { l = strlen(ch); flag = ans = 0; for(i = 1; i < l; i ++) { if(ch[i] <= ch[i - 1]) { flag = 1; break; } } if(flag) { cout << 0 << endl; continue; } for(i = 0; i < l; i ++) { if(i) j = ch[i - 1] - 'a' + 1; else j = i; for(; j < ch[i] - 'a'; j ++) { ans += dp[l - i - 1][j]; } if(i < l - 1)ans += sum[l - i - 2]; } cout << ans + 1 << endl;//加上当前串。 } }
相关文章推荐
- poj 1850 Code
- poj1850-CODE-组合
- POJ 1850 Code (数位DP)
- POJ 1850 Code
- poj 1850 Code
- poj1850 code 字串的编号
- poj&nbsp;1850&nbsp;Code&nbsp;递推
- 【POJ 1850】 Code
- POJ 1850 Code (组合数学)
- POJ 1850 Code
- poj 1850 Code (组合数学)
- POJ 1850 Code
- poj 1850 Code
- POJ 1850 Code
- poj 1850 Code
- poj1850 Code
- Code--POJ 1850
- POJ-1850 Code
- Code(poj 1850)
- POJ - 1850 Code 组合数