diff --git a/21006/2400011491.md b/21006/2400011491.md new file mode 100644 index 00000000..007c8a48 --- /dev/null +++ b/21006/2400011491.md @@ -0,0 +1,42 @@ +# 状态: [Accepted](http://xzmdsa.openjudge.cn/2025hw2/solution/48650678/) + +~~~ +基本信息 +#:48650678 +题目:250205 +提交人:2400011491王思杰(24n2400011491) +内存:3580kB +时间:27ms +语言:Python3 +提交时间:2025-03-21 10:11:04 +~~~ + +## 解题思路 + +当有j个苹果,i个盆时: + +1、如果j =i,此时的分布方式为两种情况——是否所有的盆里都有苹果。则此时系统的分布方式为只有i-1个盆时的分布方式和所有盆里都预先放一个苹果的分布方式相加 + + ~~~ + dp[i][j] = dp[i][j-1]+ dp[i-j][j] + ~~~ + +当j =i时,此时会出现0个苹果的分布方式——1种。 + +但0个苹果的分布其实是不会出现的,所以我让代码中的i, j都对应i+1,j+1个盆,苹果。这样就减少了空间复杂度。 + +为了处理动态规划过程中会出现的0个苹果的情况,我特地在转移方程中额外加了i =j的判断 + +~~~ +dp[i][j] = dp[i][j - 1] + 1 +~~~ + +## 遇到的坑 + +如果像我一样i 和j 都从对应i+1,j+1,在i-j时就会出现零点偏移的现象——当i-j=0时,会索引到1个盆而不是0个盆。所以要额外减1. \ No newline at end of file diff --git a/21006/2400011491.py b/21006/2400011491.py new file mode 100644 index 00000000..56ea687c --- /dev/null +++ b/21006/2400011491.py @@ -0,0 +1,15 @@ +m,n =map(int,input().split()) +dp = [[0 for i in range(n)] for j in range(m)] + +for j in range(n): + for i in range(m): + if i==0 or j==0: + dp[i][j] = 1 + elif i < j: + dp[i][j] = dp[i][j-1] + elif i ==j: + dp[i][j] = dp[i][j - 1] + 1 + else: + dp[i][j] = dp[i][j-1]+ dp[i-j-1][j] #i,j的都是0对应1,在相减时要额外减1 + +print(dp[m-1][n-1]) \ No newline at end of file diff --git a/21006/README.md b/21006/README.md new file mode 100644 index 00000000..9f160df4 --- /dev/null +++ b/21006/README.md @@ -0,0 +1,39 @@ +## 250205:放苹果(盘子相同) + +- [查看](http://xzmdsa.openjudge.cn/2025hw2/250205/) +- [提交](http://xzmdsa.openjudge.cn/2025hw2/250205/submit/) +- [统计](http://xzmdsa.openjudge.cn/2025hw2/250205/statistics/) +- [提问](http://xzmdsa.openjudge.cn/2025hw2/clarify/250205/) + +- 总时间限制: + + 65536ms + +- 单个测试点时间限制: + + 65535ms + +- 内存限制: + + 65535kB + +- 描述 + + 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 + +- 输入 + + 苹果个数m 和盘子个数n(0<=M,1<=N<=10) + +- 输出 + + 不同的放法数目 + +- 样例输入 +~~~ + `7 3` +~~~ +- 样例输出 +~~~ + `8` +~~~ \ No newline at end of file