算法体系-23 第二十三节:暴力递归到动态规划(五)

2024-06-21 05:52

本文主要是介绍算法体系-23 第二十三节:暴力递归到动态规划(五),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 求K次打击之后,英雄把怪兽砍死的概率

1.1 描述

给定3个参数,N,M,K

怪兽有N滴血,等着英雄来砍自己

英雄每一次打击,都会让怪兽流失[0~M]的血量

到底流失多少?每一次在[0~M]上等概率的获得一个值

求K次打击之后,英雄把怪兽砍死的概率

1.2 分析 尝试

第一砍可能让他掉0滴血到m滴血,就是0到m的展开,k次的话就是有(1+m)有k个相乘 math.pow(m+1,k)

1.3 代码

    public static double right(int N, int M, int K) {if (N < 1 || M < 1 || K < 1) {return 0;}long all = (long) Math.pow(M + 1, K);long kill = process(K, M, N);return (double) ((double) kill / (double) all);}// 怪兽还剩hp点血// 每次的伤害在[0~M]范围上// 还有times次可以砍// 返回砍死的情况数!public static long process(int times, int M, int hp) {if (times == 0) {return hp <= 0 ? 1 : 0;}//if (hp <= 0) {//return (long) Math.pow(M + 1, times);//}long ways = 0;for (int i = 0; i <= M; i++) {ways += process(times - 1, M, hp - i);}return ways;}

1.4 改动态规划

base条件是当前times==0 ,hp

hp - i 当 hp 剩余血量为0,但是还有3刀的情况那么hp - i就会越界

推表的时候,又出现小于的表的情况就剪支

1.5 动态规划代码

public static double dp1(int N, int M, int K) {if (N < 1 || M < 1 || K < 1) {return 0;}long all = (long) Math.pow(M + 1, K);long[][] dp = new long[K + 1][N + 1];dp[0][0] = 1;for (int times = 1; times <= K; times++) {dp[times][0] = (long) Math.pow(M + 1, times);for (int hp = 1; hp <= N; hp++) {long ways = 0;for (int i = 0; i <= M; i++) {if (hp - i >= 0) {ways += dp[times - 1][hp - i];} else {ways += (long) Math.pow(M + 1, times - 1);}}dp[times][hp] = ways;}}long kill = dp[K][N];return (double) ((double) kill / (double) all);}

这篇关于算法体系-23 第二十三节:暴力递归到动态规划(五)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080376

相关文章

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

.NET利用C#字节流动态操作Excel文件

《.NET利用C#字节流动态操作Excel文件》在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据,本文将演示如何在.NET平台使用C#通过字节流创建,读取,编辑及保... 目录用C#创建并保存Excel工作簿为字节流用C#通过字节流直接读取Excel文件数据用C#通过字节

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作