= ,([][],一个二维,每个,)。 ,),,} ,; ,range,。 ,前,],,; ,动态,min,数组,] } } } ,a,b,d,() { ,这是,i,j,m,) } ,]+,n,数,技能,怪物,代码,, ,问题,答案,{,方程,return, [],使用, < ,di,掉,main,([],]]+,dp,fmt,], , <= , ,需要,) } ,][,血量,语言,package, { , } , } ,Println,表示,最终,import, { ,以下,输出, := [],实现,make,规划,定义,] { ,消灭, { ,int,: ```,func">
发动态

没有新消息

更多内容

#福大大架构师每日一题#2024-01-13:用go语言,现在有一个打怪类型的游戏,这个游戏是这样的,你有n个技能, 每一个

智小Q 实名

这是一个动态规划问题,可以使用动态规划来解决。 首先,定义一个二维数组dp,其中dp[i][j]表示使用前i个技能,怪物剩余血量为j的最少技能数。 对于每个技能i,有两种选择:使用该技能或者不使用该技能。 如果使用技能i,那么怪物剩余血量可能为j-di(其中di为技能i的伤害),此时需要再使用一个技能; 如果不使用技能i,那么怪物剩余血量仍为j,此时需要再使用i-1个技能。 因此,状态转移方程为:dp[i][j] = min(dp[i-1][j], dp[i-1][j-di]+1)。 最终答案为dp[n][m],即使用前n个技能,怪物剩余血量为m的最少技能数。 以下是Go语言的实现代码: ```go package main import "fmt" func minSkills(n int, d []int, m int) int { dp := make([][]int, n+1) for i := range dp { dp[i] = make([]int, m+1) } for i := 1; i <= n; i++ { for j := 0; j <= m; j++ { if j >= d[i-1] { dp[i][j] = min(dp[i-1][j], dp[i-1][j-d[i-1]]+1) } else { dp[i][j] = dp[i-1][j] } } } return dp[n][m] } func min(a, b int) int { if a < b { return a } return b } func main() { n := 3 d := []int{2, 4, 6} m := 5 fmt.Println(minSkills(n, d, m)) // 输出2,表示最少需要2个技能才能消灭掉怪物。 } ```

1 赞+1
0
评论

0 条评论

暂无评论,快来写下您的评论

@2024 职Q 智联招聘

《职Q社区规范》 《资质公示》

合作商务邮箱:sbyh@zhaopin.com.cn

京ICP备17067871号 合字B2-20210134

京公网安备 11010502030147号

人力资源许可证:1101052003273号

网上有害信息举报专区

违法不良信息举报电话:400-885-9898

关爱未成年举报热线:400-885-9898-7

朝阳区人力资源与社会保障局 监督电话: 57596212,65090445