zoukankan      html  css  js  c++  java
  • POJ 1850 Code

    //这题和上题没什么区别
    // 就是数据大了点而已
    // 直接参考上题 http://www.cnblogs.com/372465774y/p/3604095.html
    #include <iostream> #include <string> #include<sstream> #include <cmath> #include <map> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define LL long long LL C[40][40]; int dp[40]; void init() { int i,j; for(i=0;i<=30;i++) C[i][0]=1; for(i=1;i<=30;i++) for(j=1;j<=i;j++) C[i][j]=C[i-1][j-1]+C[i-1][j]; } char str[10]; int h[30]; LL fun(int ln,int index) { int i=1,j=1; LL sum=0; char c=str[index]; int lf=26; if(index>0) { index--; lf='z'-str[index]; i=str[index]-'a'+1; } for(;i<=26;i++) if(!h[i]) { if(c==(i-1+'a')) break; else { sum=sum+ C[lf-j][ln-1]; j++; } } return sum; } int main() { init(); int i,j; while(scanf("%s",str)!=EOF) { memset(h,0,sizeof(h)); int len=strlen(str); int flag=0; LL ans=0; for(i=1;i<len;i++) ans+=C[26][i]; for(i=0;i<len;i++) for(j=i+1;j<len;j++) if(str[i]>=str[j]) flag=1; if(flag) printf("0 "); else { for(i=0;i<len;i++) { ans=ans+fun(len-i,i); h[str[i]-'a'+1]=1; // lf--; } printf("%lld ",ans+1); } } return 0; }
  • 相关阅读:
    hdu 4403 枚举
    hdu 4405概率dp
    lightoj 1036 dp
    lightoj 1033 区间dp
    lightoj 1032 二进制的dp
    hdu 4293 dp求最大权值不重合区间
    poj 2449 第k短路
    hdu 4284 状态压缩
    hdu4281 区间dp
    poj 2288 tsp经典问题
  • 原文地址:https://www.cnblogs.com/372465774y/p/3604123.html
Copyright © 2011-2022 走看看