pull/3/head
Leo 5 years ago
parent e71dbc507a
commit ffd83ca8cc

@ -0,0 +1,43 @@
package leo.class22;
/**
* @author Leo
* @ClassName KillMonster
* @DATE 2021/1/14 9:06
* @Description
*
* 3NMK
* N
* [0~M]
* [0~M]
* K
*/
public class KillMonster {
static class Recursion{
public static double kill(int n, int m, int k) {
if (n < 1 || m < 1 || k < 1) {
return 0;
}
long ans = process(n, m, k);
return (double) ans / Math.pow(m + 1, k);
}
private static long process(int hp, int m, int rest) {
if (hp <= 0) {
return (long) Math.pow(m + 1, rest);
}
if (rest == 0) {
return hp == 0 ? 1 : 0;
}
int ans = 0;
for (int i = 0; i <= m; i++) {
ans += process(hp - i, m, rest - 1);
}
return ans;
}
}
}

@ -0,0 +1,92 @@
package leo.class22;
/**
* @author Leo
* @ClassName splitNumber
* @DATE 2021/1/14 10:02
* @Description
*
* 1
* (1) 2(11)
* (2) 3(111)(12)
* (3) 4(1111)(112)(13)(22) (4)
* n
*/
public class splitNumber {
static class Recursion {
public static int number(int n) {
if (n <= 0) {
return 0;
}
return process(n, 1);
}
private static int process(int rest, int pre) {
if (rest == 0) {
return 1;
}
if (rest <= pre) {
return rest - pre == 0 ? 1 : 0;
}
int ans = 0;
for (int j = pre; j <= rest; j++) {
ans += process(rest - j, j);
}
return ans;
}
}
static class Dp{
public static int number(int n) {
if (n <= 0) {
return 0;
}
int[][] dp = new int[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
dp[i][i] = 1;
dp[i][0] = 1;
}
for (int pre = n - 1; pre > 0; pre--) {
for (int rest = pre + 1; rest <= n; rest++) {
int ans = 0;
for (int j = pre; j <= rest; j++) {
ans+= dp[j][rest - j];
}
dp[pre][rest] = ans;
}
}
return dp[1][n];
}
}
static class OptDp{
public static int number(int n) {
if (n <= 0) {
return 0;
}
int[][] dp = new int[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
dp[i][i] = 1;
dp[i][0] = 1;
}
for (int pre = n - 1; pre > 0; pre--) {
for (int rest = pre + 1; rest <= n; rest++) {
//下面的格子
dp[pre][rest] = dp[pre+1][rest];
//左侧的格子
dp[pre][rest] += dp[pre][rest - pre];
}
}
return dp[1][n];
}
}
public static void main(String[] args){
System.out.println( Recursion.number(13));
System.out.println(Dp.number(13));
System.out.println(OptDp.number(13));
}
}
Loading…
Cancel
Save