递归算法(三)——多项分布问题
问题
一个枪手打靶,靶从外向内有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);
递归算法(三)——多项分布问题的更多相关文章
- python递归三战:Sierpinski Triangle、Tower of Hanoi、Maze Exploring
		本文已做成视频教程投稿b站(视频版相对文本版有一些改进),点击观看视频教程 本文主要通过三个实例来帮助大家理解递归(其展示动画已上传B站): 谢尔宾斯基三角形(Sierpinski Triangle) ... 
- 数据结构与算法 Big O 备忘录与现实
		不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新. 算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ... 
- 递归算法+sql三种分页
		using Maticsoft.Common; using System; using System.Collections.Generic; using System.Data; using Sys ... 
- 递归算法(三)——不借助四则运算实现加法
		问题 求两个整型变量的和,不能使用四则运算,但可以使用位运算. 思路 以二进制形式,考虑两个整数相加: a = 01101001b b = 11100111b s = ???????? 一个常见的结 ... 
- Python基础(三)
		本章内容: 深浅拷贝 函数(全局与局部变量) 内置函数 文件处理 三元运算 lambda 表达式 递归(斐波那契数列) 冒泡排序 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝 ... 
- 递归算法经典实例小结(C#实现)
		一 .递归算法简介 在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往 ... 
- 数据结构算法C语言实现(三十二)--- 9.1静态查找表
		一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ... 
- 【Tree 1】树形结构数据呈现的递归算法实现
		一.基本概况 在我的项目中,常常会用到树形结构的数据,最为明显的就是左边菜单栏,类似于window folder一样的东西. 而我之前一直是借助前端封装好的ZTree等工具实现展示,而后台则通常使用递 ... 
- 递归算法(一)——akm
		要求 已知akm函数如下: { n+1 while m=0 } => Rule I akm(m,n)= { akm(m-1,1) while n ... 
随机推荐
- Spring配置文件详解
			转自: http://book.51cto.com/art/201004/193743.htm 此处详细的为我们讲解了spring2.5的实现原理,感觉非常有用 spring配置文件是用于指导Sp ... 
- Mac中安装node.js和npm
			换了Mac需要安装noed.js和npm记录一下首先访问node.js官网(https://nodejs.org/en/download/) 点击下载完后,一路点安装 就安装完成了 然后打开-终端-输 ... 
- Topcoder SRM 683 Div2 - C
			树形Dp的题,根据题意建树. DP[i][0] 表示以i为根节点的树的包含i的时候的所有状态点数的总和 Dp[i][1] 表示包含i结点的状态数目 对于一个子节点v Dp[i][0] = (Dp[v] ... 
- 【转】UML类图与类的关系详解
			UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ... 
- matplotlib绘制动画
			matplotlib从1.1.0版本以后就开始支持绘制动画,具体使用可以参考官方帮助文档.下面是一个很基本的例子: """ A simple example of an ... 
- JavaScript、jQuery、fish的遍历方法(each、forEach)总结
			起因 在工作中,需要在遍历的dom中找到第一个并做下操作然后退出遍历,我首先想到了用each方法,但由于无论是公用的jQuery组件还是公司的fish组件.我都忘记了怎么去退出遍历,所以就有了这篇帖子 ... 
- dom4j的quickstart
			我所理解的dom4j就是用来解析XML文档的,XML文档的重要性不言而喻,用过框架的人谁不知道呢,是不是.但是实际上需要我们自己来解析XML文档的应用场景感觉不是很多,毕竟该解析的XML都已经被框架很 ... 
- 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别(转)
			对于php$_SERVER这个全局变量 ,里面有很多的参数,慢慢的熟悉 1,http://localhost/aaa/ (打开aaa中的index.php)结果:$_SERVER['QUERY_STR ... 
- Java知识积累3-XML的DOM解析修改和删除方法
			import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;import jav ... 
- /etc/xinetd.conf 和 /etc/xinetd.d/*【新网络服务配置】
			http://blog.csdn.net/kelven2004/article/details/1701930 xinetd 是 inetd 的安全加强版,它内置了自己的 TCP wrapper, 可 ... 
