问题

一个枪手打靶,靶从外向内有1-10分(考虑脱靶得0分),打十枪,求枪手最后得90分的概率。

解决思路

一、穷举

考虑10重for循环,累计十次得分和为90者,求得概率。该法通用性差,效率低,但容易想到。

二、映射

穷举共1110种可能,即(1e10)11。则考虑10进制数N,将其遍历,从0到1110-1,映射到11进制,解出每种可能下10次的得分,累计为90则计入。

注意:1110超出了int的范围,要考虑BigInteger。或者以字符串来计算大整数。

三、递归

从动态规划角度思考。

f(goal,left)表示,剩下还有left次机会,要打满goal分,返回可能种数。

显而易见,f(goal,left) = Sum{ f(goal',left-1) },其中goal-10<=goal'<=goal,这就是递归关系。

递归的出口为,left==1,即最后一次机会,必须打满goal分,故出口为return 0<=goal<=10。

有优化的可能吗?有,考虑:只有n次机会,但剩余n*10+1次是不可能的,超出上界。

故代码为:

int shot1(int count, int start, int end, int goal, int left) {
if ((goal > left * end) || (goal < left * start))
return 0;
if (left == 1)
return (goal >= start && goal <= end) ? 1 : 0;
int acc = 0;
for (int i = start; i <= end; i++)
acc += shot1(count, start, end, goal - i, left - 1);
return acc;
}

调用:

shot1(10, 0, 10, 90, 10);

递归算法(三)——多项分布问题的更多相关文章

  1. python递归三战:Sierpinski Triangle、Tower of Hanoi、Maze Exploring

    本文已做成视频教程投稿b站(视频版相对文本版有一些改进),点击观看视频教程 本文主要通过三个实例来帮助大家理解递归(其展示动画已上传B站): 谢尔宾斯基三角形(Sierpinski Triangle) ...

  2. 数据结构与算法 Big O 备忘录与现实

    不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新.        算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...

  3. 递归算法+sql三种分页

    using Maticsoft.Common; using System; using System.Collections.Generic; using System.Data; using Sys ...

  4. 递归算法(三)——不借助四则运算实现加法

    问题 求两个整型变量的和,不能使用四则运算,但可以使用位运算. 思路 以二进制形式,考虑两个整数相加: a = 01101001b b = 11100111b s =  ???????? 一个常见的结 ...

  5. Python基础(三)

    本章内容: 深浅拷贝 函数(全局与局部变量) 内置函数 文件处理 三元运算 lambda 表达式 递归(斐波那契数列) 冒泡排序 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝 ...

  6. 递归算法经典实例小结(C#实现)

     一 .递归算法简介 在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往 ...

  7. 数据结构算法C语言实现(三十二)--- 9.1静态查找表

    一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ...

  8. 【Tree 1】树形结构数据呈现的递归算法实现

    一.基本概况 在我的项目中,常常会用到树形结构的数据,最为明显的就是左边菜单栏,类似于window folder一样的东西. 而我之前一直是借助前端封装好的ZTree等工具实现展示,而后台则通常使用递 ...

  9. 递归算法(一)——akm

    要求 已知akm函数如下: { n+1 while m=0 }                          => Rule I akm(m,n)= { akm(m-1,1) while n ...

随机推荐

  1. POJ 3233 Matrix Power Series(构造矩阵求等比)

    Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. ...

  2. fenxi

    线路:通过定义而来(固定线路可以定义,随机和临时线路怎么来) 订单:线路上点对点的关系 装车单:同意线路上的车辆可以有多个订单组成的装车单 车辆任务:给调度接口输入车辆和订单集合,根据订单产生多个车的 ...

  3. jquey与javascript相通运用查找(全)

    1.addClass\removeClass\classList(js) jQ:$('#div').addClass('hover')=====document.getElementById('div ...

  4. 在Excel中制作雷达图

    雷达图的作用 雷达图是专门用来进行多指标体系比较分析的专业图表.从雷达图中可以看出指标的实际值与参照值的偏离程度,从而为分析者提供有益的信息.雷达图一般用于成绩展示.效果对比量化.多维数据对比等等,只 ...

  5. 复旦大学2015--2016学年第二学期高等代数II期末考试情况分析

    一.期末考试成绩班级前几名 胡晓波(90).杨彦婷(88).宋卓卿(85).唐指朝(84).陈建兵(83).宋沛颖(82).王昊越(81).白睿(80).韩沅伯(80).王艺楷(80).张漠林(80) ...

  6. 基于Apache+php+mysql的许愿墙网站的搭建create database xyq; //创建xyq数据库

    1.准备CentOS7与CentOS5的基础配置 2.在两台虚拟机中配置yum. 3.在CentOS7中安装httpd与php与php-mysql PS:截图时已安装 CentOS7 关闭防火墙与se ...

  7. XSS常用技巧

    一般发现一个xss漏洞后要做的基本上就是这些: 1. 伪造请求 使用$_REQUEST或$_GET 首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码 ...

  8. provider 设计模式

    相关介绍文章: Provider Model Design Pattern and Specification, Part 1 (old but detailed). The ASP.NET 2.0 ...

  9. BirdError

    //#include<curses.h> #include<stdlib.h> #include<signal.h> #include<time.h> ...

  10. hdu 5506 GT and set dfs+bitset优化

    GT and set Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Probl ...