poj 1850-code解题报告

利用组合数学的一道题,对于一个序列先找长度比这个序列短的序列个数,再找长度相同的序列的个数

View Code
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int c[30][30];
 6 char s[15];
 7 int main()
 8 {
 9     int i,len,j,code;
10     c[0][0]=1;
11     for(i=1;i<=26;i++)
12     for(j=0;j<=i;j++)
13     c[i][j]=j?c[i-1][j-1]+c[i-1][j]:1;
14     scanf("%s",s);
15     len=strlen(s);
16     for(i=0;i<len-1;i++)//注意这里要直接结束
17     {
18         if(s[i]>=s[i+1])
19         {
20             printf("0\n");
21             return 0;
22         }
23     }
24     code=1;
25     for(i=1;i<len;i++)
26     code+=c[26][i];
27     for(i=0;i<len;i++)
28     {
29         char t=i?s[i-1]+1:'a';
30         for(;t<=s[i]-1;t++)
31         code+=c['z'-t][len-1-i];
32     }
33     printf("%d\n",code);
34     return 0;
35 }
posted @ 2012-05-29 23:53  zhenhai  阅读(166)  评论(0编辑  收藏  举报