第十八届黑龙江省赛(K dp)

链接:The 18th Heilongjiang Provincial Collegiate Programming Contest

Problem K. Turn-based Game

题意

主角有 A A A 血量,每只怪物有 B B B 血量,每个单位每次进攻伤害为 1 1 1,每个单位血量低于等于 0 0 0 判定为死亡。 进行 n n n 轮试炼,每轮有 a i a_i ai 只怪物,每一轮试炼都是主角先攻击,在主角的每次攻击后场上所有还存活的怪物对主角一起发动一次攻击。每次主角的攻击可能得到朋友的帮助,存在一个长度为 m m m 序列 b i b_i bi 代表前 m m m 次攻击中 第 i i i 次攻击,若 b i = 1 b_i=1 bi=1 主角若杀死一只怪物就可以立刻发动一次攻击(即两次攻击后怪物再攻击)。每轮试炼主角的攻击次数都从 1 1 1 开始计算。
n n n 轮试炼后主角最多剩下多少血量,若死亡则输出 ““LOSE”.

思路

首先我们要认识到两个点:对于 n n n 轮试炼,每轮之间互不影响,并且对于最优策略而言,怪物的数量没有关系,无论是几只怪物,只和我的攻击次数和朋友的帮助有关系。

我们来考虑一个简单的问题,如何用dp求解不存在朋友帮助的普通情况。

由于每次怪兽群体的总伤害量是随数量变化的,所以每次攻击后受到的伤害是不同的,这样不利于我们求解,所以我们在dp过程中计算的是每杀死一只怪物那么接下来受到的伤害就少 1 1 1. 这样就不论初始怪兽数量是多少,我们只需要知道攻击次数 i i i 和 减少的伤害就可以算出最终的结果。
定义dp方程: f [ i ] [ j ] f[i][j] f[i][j] 代表攻击 i i i 次,杀死 j j j 只怪兽时最多可以少受到的伤害。 a n s = s u m ∗ i − f [ i ] [ j ] ans = sum * i - f[i][j] ans=sumif[i][j].

接下来考虑特殊情况,只需要将得到朋友帮助可以立刻发动一次攻击考虑进去,立刻发动攻击对结果的影响是什么呢?就是这一次发动的这一次攻击不用受到怪兽的伤害,那么结合上面普通情况的方程,我们只需要增加一维,设受到朋友帮助 k k k 次, a n s = ( i − k ) ∗ s u m − f [ i ] [ j ] [ k ] ans = (i - k) * sum - f[i][j][k] ans=(ik)sumf[i][j][k].

最后对于每一轮战斗,我们只需要怪兽初始数量带入,并枚举受到朋友帮助的次数即可计算出结果。

具体见代码。

代码

#include <bits/stdc++.h>
using namespace std;#define ll long long
const int N = 1e5 + 10, inf = 0x3f3f3f3f;int A, B, n, m;
int a[N], b[N];int f[2010][110][30]; // 前i次攻击,杀死j个怪物,使用了k次帮助的最小代价(算的是可以减少的代价,总的代价最后再加上即可)
int ans[110];
int main(){ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> A >> B;cin >> n >> m;for(int i = 1; i <= n; i ++) cin >> a[i];for(int i = 1; i <= m; i ++) cin >> b[i];memset(f, 0x3f, sizeof f);f[0][0][0] = 0; for(int i = 1; i <= 100 * B; i ++){for(int j = 0; j < 100; j ++){for(int k = 0; k < 20; k ++){if(f[i - 1][j][k] == inf) continue ;int sum = i - j * B; // 总伤害 - 杀死的怪兽 = 剩余伤害量if(sum >= B){ // 剩余伤害足够杀死一个怪兽if(b[i] == 1) f[i][j + 1][k + 1] = min(f[i][j + 1][k + 1], f[i - 1][j][k]); // 因为本轮攻击可以看做是被朋友帮助发动的,不会受到伤害就不用减去死去怪物数量else f[i][j + 1][k] = min(f[i][j + 1][k], f[i - 1][j][k] - (j + 1));}f[i][j][k] = min(f[i][j][k], f[i - 1][j][k] - j); // 本次不杀死新的怪兽,那么已经被杀死的j只怪兽无法攻击从代价中减去}}}for(int i = 1; i <= 100; i ++){ans[i] = inf;for(int k = 0; k <= min(i, 20); k ++){if(f[i * B][i][k] < inf){ans[i] = min(ans[i], (i * B - k) * i + f[i * B][i][k]);}}}ll sum = 0;for(int i = 1; i <= n; i ++){sum += ans[a[i]];}if(sum > A) cout << "LOSE\n";else cout << A - sum << "\n";return 0;
}

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

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

相关文章

MacOS使用PF实现iptables的端口转发功能

目录 准备web服务通过pf实现端口转发其他命令参考文章 准备web服务 使用Flask启动一个简单的web服务 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello World!if __name__ __main__:app.run(port5000)浏览器访问&#xff1a;http:/…

mybatis plus框架@TableField注解不生效问题及解决方案

目录 一、问题描述二、解决方案三、关于TableField注解失效原因的思考四、Mapper接口LambdaQuery方法调用过程梳理1、Mapper接口调用实际上使用的是动态代理技术2、mybatisplus对查询的单独处理3、findOne实际上还是要查询List4、mybatis接口上下文信息MappedStatement5、myba…

EasyCVR智能边缘网关用户信息泄漏漏洞

EasyCVR智能边缘网关用户信息泄漏漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: title"EasyCVR" 漏洞复现1. 构造poc2. 获取管理员账户密码3. 登录后台 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提高网络安全意识和技术水平…

办公必备神器:如何用AI快速生成年终总结PPT?

2023年已经步入尾声&#xff0c;今年的销售业绩如何&#xff1f;用户同比增长率是否达到预期&#xff1f;部门年度API完成情况&#xff1f;新开发的项目进展如何&#xff1f;品牌全球计划在各区域市场的部署进展&#xff1f;…… 每年年底&#xff0c;不论是纵横全球的大企业&…

开发环境配置之Linux安装golang

Linux安装golang 目录 1. 下载Go发行版2. 配置工作空间3. 版本升级 1. 下载Go发行版 从官方地址&#xff1a;https://golang.org/dl/ 上下载合适的 二进制发行版 可以使用wget、curl等工具下载具体的go的发行版。 wget https://go.dev/dl/go1.21.3.linux-amd64.tar.gz接着…

Android---底层剖析 Window、Activity、View 三者关系

对于一个 Android 工程师来讲&#xff0c;或多或少都听说过 Window 的概念&#xff0c;并且隐约感受到它在 Activity 和 View 之间应该发挥着某种连接的作用。但如果要说出这三者之间的关系&#xff0c;多数 android 工程师都不知道从何下手。 Activity 的 setContentView Ac…

教研成果登记网站建设开发原理,齿轮加工刀片

成都工具研究所有限公司的前身是成都工具研究所&#xff0c;于1956年创建于北京&#xff0c;是原机械工业部的直属研究所&#xff0c;是我国机械工业的综合性工具科研机构。公司ctri.com.cn 公司主要从事精密切削工具、精密测量仪器以及表面改性处理技术的技术研究、产品开发和…

VScode远程连接错误:进程试图写入不存在的管道

使用VScode连接树莓派时&#xff0c;出现远程连接错误&#xff1a;进程试图写入不存在的管道 解决方案&#xff1a; &#xff08;1&#xff09;可以进入config所在文件夹&#xff0c;删除文件 &#xff08;2&#xff09;无法解决的化尝试下述方法 输入 Remotting-SSH:Settin…

FreeRTOS-任务通知

一.任务通知的相关API 1. vTaskNotifyGive(): 用于给指定任务发送通知。 void vTaskNotifyGive( TaskHandle_t xTaskToNotify );参数说明&#xff1a; xTaskToNotify: 被通知的任务的句柄。返回值&#xff1a; 无。2. ulTaskNotifyTake(): 用于等待并接收任务通知。 uint32_…

自定义表格的表头根据后端的数据进行筛选是否进行自定义表头添加按钮

自定义表格的表头根据后端的数据进行筛选是否进行自定义表头添加按钮 自定义表格的表头根据后端的数据进行筛选是否进行自定义表头添加按钮 <template><div class"box"><el-table :data"msgMapList" border class"table">&l…

Java入门篇 之 逻辑控制(练习题篇)

博主碎碎念: 练习题是需要大家自己打的请在自己尝试后再看答案哦&#xff1b; 个人认为&#xff0c;只要自己努力在将来的某一天一定会看到回报&#xff0c;在看这篇博客的你&#xff0c;不就是在努力吗&#xff0c;所以啊&#xff0c;不要放弃&#xff0c;路上必定坎坷&#x…

k8s约束调度其二

一&#xff0c;Pod亲和性与反亲和性 调度策略匹配标签操作符拓扑域支持调度目标nodeAffinity主机In, NotIn, Exists,DoesNotExist, Gt, Lt 否 指定主机podAffinityPodIn, NotIn, Exists,DoesNotExist是Pod与指定PodpodAntiAffinityPodIn, NotIn, Exists,DoesNotExist是Pod与指…

java8利用Stream方法求两个List对象的交集、差集与并集(即:anyMatch和allMatch和noneMatch的区别详解)

1、anyMatch 判断数据列表中是否存在任意一个元素符合设置的predicate条件&#xff0c;如果是就返回true&#xff0c;否则返回false。 接口定义&#xff1a; boolean anyMatch(Predicate<? super T> predicate); 方法描述&#xff1a; 在anyMatch 接口定义中是接收 P…

c++ Vector 学习

vevtor 是c 中自带得动态数组&#xff0c;dynamic array array can hold different values/objects of same type 可以装不同得类型或者对象 dynamic size can be changed at runtime 可以运行得时候改变 要使用的话&#xff0c;先引入 #include <vector> std::vector…

Kafka基本原理、生产问题总结及性能优化实践 | 京东云技术团队

Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各种需求场景&a…

Mac 解决 APP 快捷键冲突

打开 Mac 系统设置键盘->键盘快捷键->App快捷键->添加快捷键&#xff08;加号&#xff09;->标题需要和tab名称完全一致&#xff08;包括中英文、标点符号等&#xff0c;如下图&#xff09;设置快捷键即可 Reference&#xff1a; https://www.cnblogs.com/Questio…

考前须知-11月软考机考

1、11月4-5日考试有几个时间点需注意&#xff1a; 考前40分钟&#xff0c;应试人员应到达准考证上所指定的考点&#xff0c;凭本人准考证和有效证件&#xff08;居民身份证、社会保障卡、港澳台居民身份证明、外籍人员护照、外国人永久居留证明&#xff09;原件进入进入本资格…

算法通关村第五关|青铜|基于链表实现队列

基于链表实现队列 public class LinkQueue {// front的next指向首部结点private Node front;// rear记录尾部结点private Node rear;private int size;public LinkQueue() {this.front new Node(0);this.rear new Node(0);}// 入队public void push(int value) {Node newNod…

分析报告有样板了-奥威BI数据可视化报表模板

述职报告、月度数据分析报告、季度数据分析报告、区域数据分析报告……人在职场&#xff0c;数据分析报告少不了。那么&#xff0c;怎么才能在极短的时间内做出一张既好看又突出重点、分析逻辑在线的数据可视化分析报表&#xff1f;奥威BI软件的建议是采用BI数据可视化报表模板…

成本中心修改后推送其他SAP系统更新成本中心(ALE)

成本中心修改后推送给其他系统 KSH2成本中心组新增成本中心&#xff08;服务器A 400client&#xff09; KAVB 输入成本中心组、控制范围、目标系统 Y 查看&#xff08;服务器B 430client&#xff09;