http://poj.org/problem?id=1850

以前接触组合数学的东西比较少,以后要训练一些这类的题目了。。http://baike.baidu.com/view/738955.htm

利用的是公式是c[i][j] = c[i - 1][j - 1] + c[i][j - 1] 类比到杨辉三角。这道题目就是给字符串标号,给定的字符串要求满足s[i] < s[i + 1] < s[i + 2] ......,如果不满足则输出0,然后是给定一个字符串输出其编号。我们只要求出所有比他小的字符串的个数茫然后加上他本身就得到了他的编号。假设字符串为s,长度为len

分两部分求:1:首先求长度为1,2,3,......len -1的所有字符串的个数,因为所有的这些字符串肯定小于长度为len 的字符串;2:再从高位到低位锁定最高位,求出锁定最高位后后面所有的个数。

View Code

#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 27
using namespace std;int c[maxn][maxn];
char s[13];//求组合数
void init()
{int i,j;for (i = 0; i <= 26; ++i){c[i][0] = 1; c[i][i] = 1;}for (i = 2; i <= 26; ++i){for (j = 1; j <= i - 1; ++j){c[i][j] = c[i - 1][j - 1] + c[i - 1][j];}}
}
//判断是否可编码
bool isok(char *st)
{int i,j;int len = strlen(st);for (i = 0; i < len; ++i){for (j = i + 1; j < len; ++j){if (st[i] >= st[j]) return false;}}return true;
}
int main()
{int ans = 0;int i;init();scanf("%s",s);if (!isok(s)){printf("0\n");}else{int len = strlen(s);//求长度为1,2,,,,len - 1for (i = 1; i < len; ++i){ans += c[26][i];}//因为对于锁定s[0]后,它后面一位的取值是从a - s[0]所以要拿出来单独考虑for (char ch = 'a'; ch != s[0]; ch++){ans += c['z' - ch][len - 1];}for (i = 1; i < len; ++i){//其余的就是从他的前一个字符开始了for (char ch = s[i - 1] + 1; ch != s[i]; ch++){ans += c['z' - ch][len - i - 1];}}printf("%d\n",ans + 1);}return 0;
}

转载于:https://www.cnblogs.com/E-star/archive/2012/05/01/2477740.html

pku 1850 Code 组合数学排列组合的应用相关推荐

  1. 组合数学-排列组合整理

    此文是我整理组合数学排列组合知识的博文,排列组合从零开始...加油! 1.重复组合: 从n种不同元素中取出m的元素(方法是从n个元素中每次取出一个后,放回,再取另外一个,直到取出m个元素),每一种元素 ...

  2. 组合数学--排列组合

    组合数学--排列组合 1. 概述 1.1 应用 1.2 三大问题 2. 排列组合 2.1 两大法则 2.2 排列 3. 放球模型 4. 模型转换 5. 线性方程的解 5.1 若干等式及其组合意义 6. ...

  3. 组合数学——排列组合经典模型

    组合数学--排列组合经典模型 球盒模型 n n n个不同的球放入 m m m个相同的盒子里面,盒子不允许为空 这和第二类斯特林数的定义相同,答案为 { n m } {n \brace m} {mn​} ...

  4. [组合数学] 排列组合

    文章目录 加法法则 --每一类都能够独立的完成任务 乘法法则 --集合论 任务分步骤 1000和9999之间有多个具有不同数位的奇数 n = 7 3 + 1 1 2 + 1 3 4 ^3+11^2+1 ...

  5. POJ 1850 Code(组合数学)

    题目链接 这个题目的组合解法,太巧妙了.长度为n的方案数总和为C(26,n),我竟没有发现..然后+长度和字符串相等的时候的情况,第一位默认,以后默认为前一位+1,这样才能保证递增特性. 网上还有DP ...

  6. 组合数学 排列组合基本问题总结

    1. 从n个不同元素中允许重复地选取r个元素的组合数是C(n+r-1,r) 证明思路:采用划归转化的思想,将可重组合转化为无重组合,证明的一般思路: 1. 先设出一组有序序列 2. 对该序列进行变换 ...

  7. 组合数学(排列组合,容斥原理,数论定理)

    组合数学的学习 排列组合 一.排列组合基础 二.排列组合练习题 容斥原理 定理学习 例题练习 例题1: [ 1 , n ] [1,n] [1,n] 中有多少个数能被 x 或 y 整除 例题2: [ 1 ...

  8. 【组合数学】排列组合 ( 集合排列、分步处理示例 )

    文章目录 一.集合排列.分步处理示例 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | 二项式定理 ...

  9. 【组合数学】排列组合 ( 多重集组合数示例 | 三个计数模型 | 选取问题 | 多重集组合问题 | 不定方程非负整数解问题 )

    文章目录 一.多重集组合示例 二.三个计数模型 排列组合参考博客 : [组合数学]基本计数原则 ( 加法原则 | 乘法原则 ) [组合数学]集合的排列组合问题示例 ( 排列 | 组合 | 圆排列 | ...

最新文章

  1. while循环的习题
  2. python绘制灰度图片直方图-python数字图像处理(9):直方图与均衡化
  3. python实验收获_python实验课代码心得
  4. 一款好用的轮播插件swiper,适用于移动端和web
  5. IdentityServer4学习笔记汇总(实现传送门在底部)
  6. Webpack 4进阶--从前的日色变得慢 ,一下午只够打一次包
  7. VC6 CImage 加载jpg png bmp
  8. Ubuntu下安装CUDA
  9. 对刚iPad!华为最强Pad发布,独揽四项全球第一,3299元起!
  10. Scheme报错define-values: assignment disallowed; cannot change constant
  11. 大小端判断及相互转化
  12. upload-labs19记录
  13. spark 添加依赖_单机用python写spark处理20G的数据
  14. Logisim元件用法详解四:Arithmetic 运算器
  15. openkore 207cn 中文加强版 2010.01.12【彪彪修改】
  16. java实现微信支付之扫码支付
  17. Comware 架构理解
  18. 不规则四面体知道六边的体积公式
  19. 他把自己估值上万亿美元的项目免费化了.....
  20. 使用keil5中的RL_TCPNet中间件建立一个工程

热门文章

  1. qa session of management of technology
  2. csmar eco research
  3. bike with a famous logo
  4. cambridge ccaf potential supervisors!
  5. 在线浏览器录屏软件!妈妈再也不用担心我的windows找不到录屏软件啦!
  6. 20189211 《网络攻防》第五周作业
  7. js小笔记 -- let const的理解
  8. 央行官员:强化虚拟货币监管 遏制境外发币行为
  9. 项目案例分享二:密码策略与上次交互式登录
  10. HDFS【2.5.1】系列1:HDFS的核心数据结构---元数据