标签:
题目链接:http://acm.swust.edu.cn/problem/0648/
1
2
3
4
|
a
az
abc
aa
|
1
2
3
4
|
1
51
677
ERROR
|
1 /*******************数位dp*************************/ 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 int n, bit[11], judge[27], flag; 7 char s[11]; 8 9 int dfs(int pos, int istrue, bool limit, bool fzero){ 10 if (pos < 0) return 1; 11 int last = limit ? bit[pos] : 26; 12 int ret = 0; 13 for (int i = fzero ? 0 : 1; i <= last; i++){ 14 //允许多个前导零 15 if (!fzero&&istrue&(1 << i)) continue; 16 ret += dfs(pos - 1, istrue | (1 << i), limit&&i == last, fzero&&!i); 17 } 18 return ret; 19 } 20 21 int main(){ 22 while (cin >> s){ 23 n = strlen(s); 24 flag = 0; 25 memset(judge, 0, sizeof(judge)); 26 for (int i = n; i >= 1; i--){ 27 bit[n - i] = s[i - 1] - ‘a‘ + 1; 28 if (!judge[bit[n - i]]) judge[bit[n - i]] = 1; 29 else { 30 flag = 1; 31 break; 32 } 33 } 34 if (flag) cout << "ERROR\n"; 35 else cout << dfs(n - 1, 0, 1, 1) - 1 << endl; 36 } 37 return 0; 38 }
标签:
原文地址:http://www.cnblogs.com/zYx-ac/p/4563754.html