机试 day5
- 继续刷题,今天先刷几道动态规划,对于状态转移还是有点薄弱
- 记录一道题解【分苹果】:m 个苹果n 个盘子,求不分顺序的最多种分发。(1,2),(2,1)是同一种分法。
f(a,b,c):a 个 苹果 b 个盘,每个盘最多 c 个苹果;取第一个盘放 c 个,累加后续分法f(a - c, b -1, c)
```java
static int[][][] memo;
// a 个苹果放进 b 个盘子,每个盘子最多放 c 个苹果
public static int f(int a, int b, int c) {
if(a == 0) return 1; // 没有苹果,则盘子放 0 个也是 1 种可能
if(b == 0) return 0; // 没有盘子,返回 0
if(memo[a][b][c] != -1) return memo[a][b][c]; //记忆化
int ways = 0;
for(int i = 0; i <= a && i <= c; i++) {
ways += f(a - i, b - 1, i);
}
memo[a][b][c] = ways;
return ways;
}
}
```
- 记录一道题解【分苹果】:m 个苹果n 个盘子,求不分顺序的最多种分发。(1,2),(2,1)是同一种分法。
f(a,b,c):a 个 苹果 b 个盘,每个盘最多 c 个苹果;取第一个盘放 c 个,累加后续分法f(a - c, b -1, c)
```java
static int[][][] memo;
// a 个苹果放进 b 个盘子,每个盘子最多放 c 个苹果
public static int f(int a, int b, int c) {
if(a == 0) return 1; // 没有苹果,则盘子放 0 个也是 1 种可能
if(b == 0) return 0; // 没有盘子,返回 0
if(memo[a][b][c] != -1) return memo[a][b][c]; //记忆化
int ways = 0;
for(int i = 0; i <= a && i <= c; i++) {
ways += f(a - i, b - 1, i);
}
memo[a][b][c] = ways;
return ways;
}
}
```
2025-07-19
在牛客打卡5天,今天学习:代码提交 10 次
全部评论
相关推荐

点赞 评论 收藏
分享
07-19 20:03
成都信息工程大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享