暴力递归到动态规划(五)
练习1(样本对应模型)
给定3个参数,N, M, K,怪兽有N滴血,等着英雄来砍自己,英雄每一次打击,都会让怪兽流失[0-M]的血量,到底流失多少?每一次在[0-M]上等概率的获得一个值,求K次打击之后,英雄把怪兽砍死的概率
练习2
arr是面值数组,其中的值都是正数且没有重复。再给定一个正数aim。每个值都认为是一种面值,且认为张数是无限的。返回组成aim的最少货币数
斜率优化(观察当前位置和附近位置的依赖关系)
练习3
给定一个正数1,裂开的方法有一种,(1)给定一个正数2,裂开的方法有两种,(1和1)、(2)给定一个正数3,裂开的方法有三种,(1、1、1)、(1、2)、(3)给定一个正数4,裂开的方法有五种,(1、1、1、1)、(1、1、2)、(1、 3)、(2. 2)、(4)给定一个正数n,求裂开的方法数(后面的数必须大于等于前面的数)。动态规划优化状态依赖的技巧
function process1(pre, rest) {
if(rest==0)return 1
if (pre > rest) {
return 0
}
let ways = 0;
for (let i = pre; i <= rest; i++) {
ways += process1(i, rest - i)
}
return ways
}
function process(rest,num){
if(rest==0)return 1
if (num > rest) {
return 0
}
let res = 0;
for (let zhang = 0; zhang*num <=rest; zhang++) {
res+= process(rest-zhang*num,num+1)
}
return res
}
