zoukankan      html  css  js  c++  java
  • Code(poj 1850)

    大致题意:(与POJ1496基本一致)

    输出某个str字符串在字典中的位置,由于字典是从a=1开始的,因此str的位置值就是 在str前面所有字符串的个数 +1

    规定输入的字符串必须是升序排列。不降序列是非法字符串

    不要求用循环输入去输入若干组字符串,但若输入非法字符串则输出0,且结束程序,这是和POJ1496最猥琐的区别,很多同学只注意到规定str的长度不同,以为把str数组长度改一下直接复制就能AC再多刷一题了,殊不知老是WA却找不到原因,大概就是这里出问题了

    本题Str最长为10个字符

    //数位DP   f[i][j]:以i开头的长度为j的个数 
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #define M 30
    using namespace std;
    int f[M][M],a[M];
    char c[M];
    void F()
    {
        for(int i=1;i<=26;i++)
          f[i][1]=1;
        for(int j=1;j<=10;j++)
          for(int i=1;i<=26;i++)
            for(int k=i+1;k<=26;k++)
              f[i][j]+=f[k][j-1];
    }
    int main()
    {
        scanf("%s",c);
        int len=strlen(c),flag=0;
        for(int i=1;i<=len;i++)
        {
            a[i]=c[i-1]-'a'+1;
            if(a[i]<a[i-1])flag=1;
        }
        if(flag)
        {
            printf("0");
            return 0;
        }
        F();
        int ans=0;
        for(int i=1;i<=26;i++)//求出前len-1位的个数 
          for(int j=1;j<len;j++)
            ans+=f[i][j];
        //当到第i位时,字母一定比i-1大且比实际的小 
        for(int i=1;i<=len;i++) 
          for(int j=a[i-1]+1;j<a[i];j++)
             ans+=f[j][len+1-i];
        printf("%d",ans+1);//加上它自己 
        return 0;
    }
    View Code
  • 相关阅读:
    kafka cdh 安装
    【转】Public key for *.rpm is not installed,使用yum安装时报错
    12.yaml的简单使用
    python基础教程第三版阅读笔记(一)
    Python库文件安装失败问题及解决方式汇总-持续更新ing~
    taiko初体验
    VMware之USB设备连接
    C++之DLL的动态加载与静态加载初尝试
    C++课堂练习二
    C++课堂练习三
  • 原文地址:https://www.cnblogs.com/harden/p/5641716.html
Copyright © 2011-2022 走看看