题目链接:http://poj.org/problem?id=1850

题目大意:

  按照字典序对升序排列组成的字母进行编号,给出一个长度不超过10的串,求出它的编号是多少?如果无法进行编号则输出0。

题目分析:

  先判断字符串是不是升序的,如果不是升序的则不存在编号,直接输出0即可。

  满足升序要求的,则先根据长度len,把长度小于len的串整个处理一下,再对长度为len的递归求解。

  1.定义长度为i,以字母c开头的串的个数为f[i][c]。很容易看出来:f[i][c]=Σf[i-1][k](k=c+1-->'z'-i+2),解释一下k的取值,因为要求升序,所以以字母c开头的长度为i的串,相当于在长度为i-1的串前面插入一个c,可以插的串必然从c+1开始,直到‘z'-i+2。这个上界是为了满足长度的要求,长度为i-1的串最多只能以‘z'-i+2开头。

  2.在定义f[i][c]的时候,已经看出之中的递推关系了。那么对于长度为len的,按照串的顺序,依次处理如下:

  

for(int i='a';i<s[];i++)//对首字母特殊处理
ans+=f[len][i]; for(int i=;i<len;i++)
for(int j=s[i-]+;j<s[i];j++)//对第i个字母处理。要注意是<s[i]。
ans+=f[len-i][j]; ans++;//串本身的那个1.

  这样就求出解了。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int f[]['z'+];
int main()
{
string s;
memset(f,,sizeof(f));
for(int i='a';i<='z';i++)
f[][i]=;
for(int i=;i<=;i++)
for(int c='a';c<='z'-i+;c++)
for(int k=c+;k<='z'-i+;k++)
f[i][c]+=f[i-][k];
while (cin>>s)
{
int len=s.size();
int ans=;
bool ok=;
for(int i=;i<len;i++)
if(s[i]<=s[i-])
{
cout<<<<endl;
ok=;
break;
}
if(ok) continue;
for(int i=;i<len;i++)
for(int c='a';c<='z'-i+;c++)
ans+=f[i][c];
for(int i='a';i<s[];i++)
ans+=f[len][i];
for(int i=;i<len;i++)
for(int j=s[i-]+;j<s[i];j++)
ans+=f[len-i][j];
ans++;
cout<<ans<<endl;
}
return ;
}

POJ1850-Code 递推数学的更多相关文章

  1. Luogu P2327 [SCOI2005]扫雷【递推/数学】By cellur925

    题目传送门 推了好久啊.看来以后要多玩扫雷了qwq. 其实本题只有三种答案:0.1.2. 对于所有第一列,只要第一个数和第二个数确定后,其实整个数列就确定了,我们可以通过这个递推式得出 sec[i-] ...

  2. Acwing-98-分形之城(递推,数学)

    链接: https://www.acwing.com/problem/content/description/100/ 题意: 城市的规划在城市建设中是个大问题. 不幸的是,很多城市在开始建设的时候并 ...

  3. Number Sequence POJ - 1019 递推 数学

    题意 1 12 123 1234 12345 ....这样的序列 问第n位数字是几   是数字! 1-9! 思路:递推关系 主要是位数的计算   用a[i]=a[i-1]+(int)log10((do ...

  4. uva11401:Triangle Counting 递推 数学

    uva11401:Triangle Counting 题目读不清楚的下场就是多做两个小时...从1-n中任选3个不重复数字(不重复啊!!坑爹啊!)问能组成三角形的有多少个, 显然1~n能组成的三角形集 ...

  5. CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)

    CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...

  6. 2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】

    Pokémon GO Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. 【NOIP模拟赛】【数学真奇妙】【递推】旅行者问题

    旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...

  8. ZOJ3329(数学推导+期望递推)

    要点: 1.期望的套路,要求n以上的期望,则设dp[i]为i分距离终点的期望步数,则终点dp值为0,答案是dp[0]. 2.此题主要在于数学推导,一方面是要写出dp[i] = 什么,虽然一大串但是思维 ...

  9. UVa 10943 (数学 递推) How do you add?

    将K个不超过N的非负整数加起来,使它们的和为N,一共有多少种方法. 设d(i, j)表示j个不超过i的非负整数之和为i的方法数. d(i, j) = sum{ d(k, j-1) | 0 ≤ k ≤ ...

随机推荐

  1. 利用shell批量改名和linux中取随机数的方法

    先批量创建文件 #!/bin/sh if [ ! -d /tmp/chenyao ] then mkdir /tmp/chenyao -p fi cd /tmp/chenyao ..} do touc ...

  2. react+webpack开发环境配置

    react是目前非常热门的前端框架,提倡组件化开发.所谓的组件,简单理解,就是一个独立的页面部件(包括页面模版,样式,逻辑等),它是一个独立的整体. webpack,是一个模块打包工具,其主要功能,就 ...

  3. js华氏度转为摄氏度

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 浅谈C10K问题

    在大型的APP中进行高并发的访问,淘宝,支付宝,微信,QQ,等 C10K问题:高并发的进行访问 C10K问题的最大特点是:设计不够良好的程序,其性能和连接数及机器性能的关系往往 是非线性的.举个例子: ...

  5. Asp.NetCore之组件写法

    本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也通过调用验证码接口来自定义 ...

  6. vuejs学习笔记(1)--属性,事件绑定,ajax

    属性 v-for 类似于angular中的 ng-repeat ,用于重复生成html片段: <ul id="box"> <li v-for="(v, ...

  7. 静态数据的初始化(Chapter5.7.2)

    先初始化主类中的静态数据,如果要用其他类来定义对象,则初始化对应的其他类. 实例化对象时,先初始化定义为static的数据,接着调用父类的构造函数(如果有父类),再初始化定义为非static的数据,最 ...

  8. Nginx VS Apache

    作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率 Nginx 静态处理性能比 Apache 高 3倍以上 最核心的区别在于apache是同步多进 ...

  9. 在阿里云Linux服务器上安装MySQL

    申请阿里云Linux服务器 昨天在阿里云申请了一个免费试用5天的Linux云服务器. 操作系统:Red Hat Enterprise Linux Server 5.4 64位. CPU:1核 内存:5 ...

  10. [Paxos] Paxos Made Simple 读后感

    Paxos 由著名图灵奖获得者Leslie Lamport提出,该算法是分布式一致性算法中的奠基之作,今天初读此文仅将相关学习心得予以记录. 1.Paxos 是什么?主要用来解决什么问题? Paxos ...