https://blog.csdn.net/wdays83892469/article/details/79763421
一些关于动态规划和游戏最大伤害的题目和解法。
- 动态规划——卡牌游戏最大伤害_eck_燃的博客-CSDN博客 这篇博客介绍了一个卡牌游戏的问题,给出了暴力递归和动态规划的两种解法,以及代码实现和注释。
- 动态规划之博弈问题 - 知乎 这篇文章给出了解决博弈问题的动态规划解法。博弈问题的前提一般都是在两个聪明人之间进行,编程描述这种游戏的一般方法是二维 dp 数组,数组中通过元组分别表示两人的最优决策。
- 告别动态规划,连刷 40 道题,我总结了这些套路,看不懂你打 … 这篇文章总结了动态规划的一些常见套路和技巧,以及 40 道题目的链接和思路。
最大伤害
某游戏是一个卡牌类游戏,玩家通过战斗或抽牌可以拿到一些技能牌,每张技能牌都有对应的伤害值(伤 害值>=0),
当你有了组合技属性之后,你可以在自己手头上选择任意张技能牌, 以组合技的方式来攻击 boss,
组合技的总伤害将等于所组合的各张技能牌的伤害值的乘积(只有一张牌时,组合技伤害值等于这张牌 本身的伤害值),
但是能发动组合技必须有个前提:所有被选择的技能牌的伤害系数之和必须等于m(m>0)
以解开封印; 你为了能赢得最终胜利,需要在所有技能牌中挑出若干张技能牌触发组合技(每张牌只能用一 次),
以形成最大威力的组合技攻击效果。 例如:你有伤害值分别为1,2,3,4,5的五张牌,给定的解开封印的阈值(m)为10,
那形成最大组合攻击效果 的组合为30(532),而不是24(4321),也不是20(541),需要输出的结果即30。
递归与动态规划专题 (17条消息) 递归与动态规划专题_动态规划和递归培养什么能力_eck_燃的博客-CSDN博客
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | //暴力递归加动态规划 public class Max_Damage { //method1 暴力递归 public static int getMax( int arr[], int sum) { return process(arr, 0 ,sum); } public static int process( int arr[], int index, int sum) { //base case if (sum< 0 ) { return - 1 ; //无效值 } if (arr.length==index) { return sum== 0 ? 1 :- 1 ; //1乘别的数不受影响 sum==0说明选取了一种合理方案,然后用sum*答案 如果是不合理方案返回-1 } int notInclude=process(arr, index+ 1 , sum); //1-index 不选取某个数 int include=arr[index]*process(arr, index+ 1 , sum-arr[index]); //选取某个数 return Math.max(notInclude, include); } //method2 dp public static int maxDamage( int [] arr, int threshold) { if (arr == null || arr.length == 0 ) { return 0 ; } int [][] dp = new int [arr.length][threshold + 1 ]; if (arr[ 0 ] <= threshold) { dp[ 0 ][arr[ 0 ]] = arr[ 0 ]; } for ( int i = 1 ; i < arr.length; i++) { for ( int j = 0 ; j <= threshold; j++) { int no = dp[i - 1 ][j]; int only = j - arr[i] == 0 ? arr[i] : 0 ; int part = j - arr[i] > 0 ? dp[i - 1 ][j - arr[i]] * arr[i] : 0 ; dp[i][j] = Math.max(no, Math.max(only, part)); } } // printMatrix(dp); // 可以打印dp看看 return dp[dp.length - 1 ][dp[ 0 ].length - 1 ]; } public static void printMatrix( int [][] dp) { for ( int i = 0 ; i < dp.length; i++) { for ( int j = 0 ; j < dp[ 0 ].length; j++) { System.out.print(dp[i][j] + " " ); } System.out.println(); } } public static void main(String[] args) { int [] arr = { 1 , 2 , 3 , 4 , 5 }; int threshold = 10 ; System.out.println(maxDamage(arr, threshold)); System.out.println(getMax(arr, threshold)); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2022-06-28 普通for-增强for-forEach-forEach-Stream循环四种遍历方法执行效率比较
2022-06-28 java8 合并两个 list<T>, 并将tickeId相同的所有属性合并到一个T中
2021-06-28 Java 系统架构——MVC、RPC、SOA和微服务架构
2021-06-28 Restful、SOAP、RPC、SOA、微服务之间的区别
2021-06-28 SOA(面向服务的架构.)、RPC(远程过程调用)思想
2021-06-28 facade层,service 层,domain层,dao 层设计
2021-06-28 Mac下配置alias,zsh终端命令别名