题目链接
解题方法:动态规划(记录状态的完全背包)
题目分析
题目大意
输入n,m,k,s(0 < n,m,k,s < 100)四个正整数,分别代表xhd的升级所需经验、忍耐度、k种怪、最大打怪数量。每种怪有无限多只,问xhd能否升级,如果可以输出最大胜于忍耐度,否则输出-1。
解析
开一个二维数组dp[m+1][s+1],dp[i][j]记录剩余耐力为i时打完第j个怪时获得的总经验。执行k次循环,每次取一个怪出来,j从最小可接受的忍耐度b[i]开始遍历,直到m,对于每一个忍耐度,记录在当前忍耐度下打p个怪时所获得的最大经验值dp[j][p]。
然后再搜索一遍dp数组,找到第一个dp[i][j]>=n,此时花费的忍耐度为i,剩余忍耐度为m-i;如果没有找到dp[i][j]>=n,则无解,输出-1。
代码
1 |
|