首页 > 其他分享 >动态规划 完全背包问题 -游戏最大伤害

动态规划 完全背包问题 -游戏最大伤害

时间:2023-06-28 20:01:47浏览次数:47  
标签:10 背包 游戏 int damage mana cost 伤害 dp

 

1. 题目

读题

 

游戏角色, 有技能列表和魔法值, 求能造成的最大伤害, 例如:

输入skill_list: [{mana_cost:10,damage:10}, {mana_cost:12,damage:13}], current_mana: 20, 输出max_damage: 20

输入skill_list: [{mana_cost:10,damage:10}, {mana_cost:12,damage:13}], current_mana: 25, 输出max_damage: 26

输入skill_list: [{mana_cost:2,damage:5}, {mana_cost:4,damage:11}, {mana_cost:7,damage:20}], current_mana: 13, 输出max_damage: 36

考查点

 这是一道动态规划-背包问题:完全背包问题

2. 解法

思路

和  7-010-(LeetCode- 322) 零钱兑换 是非常类似的一道题

定义dp[i] 表示: 魔法值 小于等于i 的最大伤害是多少

  • 初始值: dp[0]=0 ,表示0 魔法值,最大伤害为0
  • 状态转移公式:dp[i] = dp[i-cost] +damage

 

代码逻辑

 

具体实现

 

public class GameMaxDamage {

public static void main(String[] args) {
Map<Integer, Integer> test = new HashMap<>();
test.put(2, 5);
test.put(4, 11);
test.put(7, 20);
System.out.println(maxDamage(test, 13));

Map<Integer, Integer> test2 = new HashMap<>();
test2.put(10, 10);
test2.put(12, 13);
System.out.println(maxDamage(test2, 25));

System.out.println(maxDamage(test2, 20));
}


public static int maxDamage(Map<Integer, Integer> map, int currentMana) {

Set<Integer> manaCosts = map.keySet();

int[] dp = new int[currentMana + 1];
dp[0] = 0;

for (Integer cost : manaCosts) {
int damage = map.get(cost);
for (int i = cost; i <= currentMana; i++) {
if (i >= cost) {
dp[i] = Math.max(dp[i], dp[i - cost] + damage);
}

}
}
return dp[currentMana];

}
}

 

3. 总结

 

 

 

 

标签:10,背包,游戏,int,damage,mana,cost,伤害,dp
From: https://www.cnblogs.com/shoshana-kong/p/17512406.html

相关文章

  • 架设传奇SF时提示此服务器满员,GEE引擎点开始游戏弹出服务器满员的解决方法
    之前一个朋友在架设GEE的传奇服务端时遇到一个奇怪的问题,就是在服务器外网架设时,建好角色点开始游戏提示此服务器满员,这个问题一般比较少见,而且出现的话一般都是GEE引擎的版本。他折腾了半天,一直没进游戏,我当时测试这个版本时并没有这个提示,当然我测试的是单机,于是远程连上服务器看......
  • PACM Team (牛客多校) (DP 01背包, 维度较多)
    题目大意:给出n个物品,物品有4个空间值,然后有一个权值问在不超过最大的空间值时,最大的权值  思路:一开始想了很多其他思路没有想出来开始广搜算法,发现dp可以解决(注意看数据范围,是满足的)遇到奇怪的题,就试试dp,特别在数据范围很小的时候 ......
  • 编程初学者入门11_井字棋游戏、进制转换、订闹钟(时间换算)
    一、井字棋游戏题目描述KiKi和BoBo玩“井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。输入描述:三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表......
  • 给娃写个游戏,庆祝嫦娥五号登月
    年末航天有大事,嫦五揽月取岩石。这几天,有被嫦娥五号刷屏吗?就在本周二晚11点11分,嫦娥五号的着陆器–上升器组合体成功登月,现已正式开展月面采样任务。嫦娥五号将为我国科学家带回约两千克月球岩石和土壤。时隔44年,人类终于能再次从月球带回“土特产”了!嫦娥五号(图源:中国探月工程)作为......
  • E人?I人?性格测试伤害挺大啊
    本文首发自公粽hao「林行学长」,欢迎来撩,免费领取20个求职工具资源包。了解校招、分享校招知识的学长来了!相信很多同学已经摩拳擦掌准备与秋招一较高下,然而不少前辈的经验里说:不要低估性格测试!性格测试,不是所有测试都叫性格测试……当然也不是所有企业都有性格测试。但是求职最悲催......
  • 【福利周】邀好友共领新人福利,茶具/T恤/游戏鼠标/钢笔“任你选”
    嘿,6月末期福利周来啦~今日起,邀请好友在51CTO博客成功发布第一篇原创技术文章,你和好友都有福利!(含代码400字以上必有奖)活动时间活动时间:6月26日-7月2日(共7天)活动福利活动页面:点击此处>>>累计邀请人数好友奖励你的奖励1人大号鼠标垫/3人茶具(一壶两杯)5人均码T恤(黑白随机)30人LAMY钢......
  • 从新手游上线看游戏数据库选型
    最近我们深入游戏场景,参与支撑一个全新的手游项目上线,交流中发现经验丰富的游戏架构师都比较认可一个观点:游戏业务设计离不开一款靠谱的KV数据库。这款游戏项目定位是爆款精品,有长期运营规划,因此在前期开发阶段就锁定了合适的“主数据库”选型——华为云KV数据库GaussDB(forRedis)......
  • 猜数字游戏
    #include<stdio.h>#include<stdlib.h>#include<time.h>voidmenu(){ printf("*****************************\n"); printf("****1.play 0.exit****\n"); printf("*****************************\n");}......
  • 图扑智慧地下采矿,“像素游戏”智能呈现
    在这个像素世界里,我们需要一个智能地下采矿可视化综合管理平台,来帮助我们管理和监控地下采矿全流程。图扑软件依托自主研发的HTforWeb产品,结合三维定制化渲染、动态模拟、物理碰撞、5G、物联网、云计算及大数据等先进技术,围绕地下采矿相关的实时监控、数据分析、人工智能等......
  • Rust学习笔记——基于官网和Rust语言圣经(二、猜数游戏)
    前面的helloworld项目还是太oldschool了,这样用一个猜数字的游戏来快速了解下rust语言,以及为啥cargo那么好用的原因。不要拘束新的语法点,后面都会详细介绍!2.1猜数游戏:一次猜测-本节您将学会:·let、match等方法·相关的函数·外部的crate·...猜数游戏-目标-生成一个1到10......