poj 1850
递推,统计,数位DP水题,但这题在网上归为组合数学,不知道思路
#include <iostream>
#include <cstdio>
#include <cstring>
#define LL long long
using namespace std;
LL f[11][30];
int main()
{
char s[11];
int i,j,k;
for(i=0;i<26;i++) f[0][i]=1;
for(i=1;i<10;i++)
{
for(j=0;j<(26-i);j++)
{
f[i][j]=0;
for(k=j+1;k<(26-i+1);k++)
{
f[i][j]+=f[i-1][k];
}
}
}
while(cin>>s)
{
int l=strlen(s);
LL ans=0;
for(i=0;i<l-1;i++)
{
for(j=0;j<(26-i);j++) ans+=f[i][j];
}
for(i=0;i<l;i++)
{
if(i==0) j=0;
else
{
if(s[i]<=s[i-1]) break;
j=(s[i-1]-'a')+1;
}
for(;j<(s[i]-'a');j++)
{
ans+=f[l-1-i][j];
}
}
if(i==l) printf("%I64d\n",ans+1);
else printf("0\n");
}
return 0;
}

浙公网安备 33010602011771号