砍死怪兽的概率

题目描述:给定3个参数,N,M,K,怪兽有N滴血,等着英雄来砍自己,英雄每一次打击,都会让怪兽流失[0,M]的血量,流失的值每次在[0,M]上等概率的获得一个值,求K次打击之后,英雄把怪兽砍死的概率。

way:概率=砍完K次之后存活(还有血)的掉血方案数/砍K次之后的所有的掉血方案数pow(M+1,K)。如果砍到某刀的时候血量已经掉完了,那么后面怎么砍都是可以砍死的,后面的方案数是pow(M+1, 剩余可砍的次数)。

//怪兽还剩下hp点血
//还有rest刀可以砍
//每次的伤害在[0,M]范围内
#include<iostream>
#include<vector>
using namespace std;//怪兽还剩下hp点血
//还有rest刀可以砍
//每次的伤害在[0,M]范围内
long long process(int hp, int rest, int M)
{//如果砍到最后还没死就是砍不死的方案if(rest==0) return hp<=0?1:0;if(hp<=0) {return pow(M+1,rest);}long long ways=0;for(int blood=0; blood<=M; blood++){ways+=process(hp-blood,rest-1,M);}return ways;
}double killMonsterPosibility(int hp, int M, int K)
{if(hp<1 || M<1 || K<1){return 0;}return (double)process(hp, K, M)/pow(M+1,K);
}

way2:dp版。

double dpWay(int N, int M, int K)
{//N为hpif(N<1 || M<1 || K<1){return 0;}//虽然hp理论上可以小于0,但是在dp中没有小于0的下标,只是没有表示,但是是有的,在ways+=pow(M+1,rest)中隐式的计算了.vector<vector<long long>>dp(N+1, vector<long long>(K+1));dp[0][0]=1;for(int rest=1; rest<=K; rest++){dp[0][rest]=pow(M+1,rest);for(int hp=1; hp<=N; hp++){long long ways=0;for(int blood=0; blood<=M; blood++){if(hp-blood>=0){ways+=dp[hp-blood][rest-1];}else{ways+=pow(M+1, rest-1);}}dp[hp][rest]=ways;}}return (double)dp[N][K]/(double)(pow(M+1,K));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka单机安装及性能测试

kafka单机安装及性能测试 Apache Kafka是一个分布式流处理平台&#xff0c;最初由LinkedIn开发&#xff0c;并于2011年开源&#xff0c;随后成为Apache项目。Kafka的核心概念包括发布-订阅消息系统、持久化日志和流处理平台。它主要用于构建实时数据管道和流处理应用&#xff0…

电商项目之有趣的支付签名算法

文章目录 1 问题背景2 思路3 代码实现 1 问题背景 在发起支付的时候&#xff0c;一般都需要对发送的请求参数进行加密或者签名&#xff0c;下文简称这个过程为“签名”。行业内比较普遍的签发算法有&#xff1a; &#xff08;1&#xff09;按支付渠道给定的字段排序进行拼接&am…

C++|设计模式(〇)|设计模式的六大原则

这里文章只做简要描述&#xff0c;作为扫盲 在软件开发过程中&#xff0c;遵循一定的设计原则可以帮助开发者创建更加灵活、可维护和可扩展的系统。设计模式的六大原则是面向对象设计的核心理念&#xff0c;本文将详细介绍这些原则&#xff0c;并结合实例说明它们的重要性和应用…

Android Studio添加依赖 新版 和 旧版 的添加方式(Gradle添加依赖)(Java)

旧版的&#xff08;在线添加&#xff09; 1找 文件 在项目的build.gradle文件中添加依赖(在下面的节点中添加库 格式 ’ 组 &#xff1a;名字 &#xff1a; 版本号 ‘ ) dependencies {implementation com.example:library:1.0.0 }implementation 组:名字:版本…

【lambdastreammaven】

lambda 匿名函数 为了简化java中的匿名内部类 事件监听 写一个类 实现 ActionListener 接口 (外部类) | | 内部类 类在其他地方用不到, 索性就把这个类定义在类的内部使用 好处: 1.内部可以使用外部类的成员 …

互联网十万个为什么之什么是分布式计算?

分布式计算是一种计算方法&#xff0c;它将计算任务分散到多个物理或逻辑上分开的计算机&#xff08;称为节点&#xff09;上执行&#xff0c;这些节点通过网络互连并协作完成共同的目标。每个节点具备独立的处理能力和存储资源&#xff0c;在分布式系统中&#xff0c;它们共享…

论文阅读--CLIPasso

让计算机把真实图片抽象成简笔画&#xff0c;这个任务很有挑战性&#xff0c;需要模型捕获最本质的特征 以往的工作是找了素描的数据集&#xff0c;而且抽象程度不够高&#xff0c;笔画是固定好的&#xff0c;素描对象的种类不多&#xff0c;使得最后模型的效果十分受限 之所以…

小米财报:业绩远超预期,汽车推着手机跑!

随着一季度财报陆续出炉&#xff0c;企业间的分化越来越明显。 新环境下&#xff0c;很多公司都陷入停滞时&#xff0c;去讨论“掉队”已经没有多少意义&#xff0c;现在真正值得我们关注的&#xff0c;是那些在逆风情况下&#xff0c;还能“领先”的企业。毫无疑问&#xff0…

ES集群性能优化参考建议

Elasticsearch&#xff08;ES&#xff09;集群性能优化是一个多方面的任务&#xff0c;涉及硬件、配置、查询优化等多个方面。以下是一些建议&#xff0c;帮助你优化Elasticsearch集群的性能&#xff1a; 1. 硬件优化 内存&#xff1a;确保分配给Elasticsearch的内存足够大&a…

C++|设计模式(三)|抽象工厂模式

抽象工厂模式仍然属于创建型模式&#xff0c;我们在【简单工厂和工厂方法模式】这篇文章中&#xff0c;描述了简单工厂和工厂方法模式&#xff0c;并在文末&#xff0c;简单介绍了工厂方法模式的局限性。 本文将通过汽车工厂的例子继续来阐述使用抽象工厂模式相比较于工厂方法…

Linux修炼之路之冯系结构,操作系统

目录 一&#xff1a;冯诺依曼体系结构 1.五大组件 2.存储器存在的意义 3.几个问题 二&#xff1a;操作系统 接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 一&#xff1a;冯诺依曼体系结构 我们当代的计算机的基本构成都是由冯诺依曼…

Kubernetes 容器编排

应用程序部署演变 主要有三个演变&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定义资源使用边界&#xff0c;很难合理地分配计算资源&…

【开源】多语言大型语言模型的革新:百亿参数模型超越千亿参数性能

大型人工智能模型&#xff0c;尤其是那些拥有千亿参数的模型&#xff0c;因其出色的商业应用表现而受到市场的青睐。但是&#xff0c;直接通过API使用这些模型可能会带来数据泄露的风险&#xff0c;尤其是当模型提供商如OpenAI等可能涉及数据隐私问题时。私有部署虽然是一个解决…

PY32F003+RTL8710(AT) 实现获取天气情况

一、RTL8710主要AT指令 1、ATSR&#xff1a;模块重启 2、ATSE1&#xff1a;开启回显 3、ATPW1&#xff1a;station模式 4、ATPNssid,password,,&#xff1a;连接到AP 5、ATPK1&#xff1a;设置自动接收 6、ATPC0,v1.yiketianqi.com,80&#xff1a;与网站建立TCP连接 7、ATPT125…

关于pytorch加载模型报错问题

load_net[“params”] 报keyerror 加载模型后查看对应参数是什么 model2 torch.load(m1_path "xxx.pth") print(model1.keys())若输出如下&#xff1a; 已经有相应参数不需要执行 load_net[“params”]若输出如下 则需要load_net[“params”]

Linux-命令上

at是一次性的任务&#xff0c;crond是循环的定时任务 如果 cron.allow 文件存在&#xff0c;只有在文件中出现其登录名称的用户可以使用 crontab 命令。root 用户的登录名必须出现在 cron.allow 文件中&#xff0c;如果这个文件存在的话。系统管理员可以明确的停止一个用户&am…

3D 生成重建014-Bidiff使用二维和三维先验的双向扩散

3D 生成重建014-Bidiff使用二维和三维先验的双向扩散 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 大多数三维生成研究集中在将二维基础模型向上投影到三维空间中&#xff0c;要么通过最小化二维评分蒸馏采样&#xff08;SDS&#xff09;损失&#xff0c;要么通过对多视图…

判断变量是否为数组的几种方法

1、isArray 方法 isArray() 方法用于判断一个对象是否为数组。如果对象是数组返回 true&#xff0c;否则返回 false。 Array.isArray(arr); // true 1 2、对象原型 通过原型链判断是否具有和数组同一原型链的顶端。 arr.__proto__ Array.prototype; // true 1 3、instanceof…

[数据结构] -- 双向循环链表

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文(平均质量分82)&#…

一文理清database/sql包的使用场景和宕机查询流程

一文理清database/sql包你可能遇到的问题 那么database/sql包实现了什么功能呢&#xff1f;建立数据库连接检测连接是否能ping通通过连接进行具体的sql查询查询完将连接进行关闭当数据库宕掉重启后再次查询 database/sql包创建的db连接 对于数据库宕掉后重启是否仍然有效&#…