Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions 21006/2400011491.md
Original file line number Diff line number Diff line change
@@ -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]
~~~

2、如果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.
15 changes: 15 additions & 0 deletions 21006/2400011491.py
Original file line number Diff line number Diff line change
@@ -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])
39 changes: 39 additions & 0 deletions 21006/README.md
Original file line number Diff line number Diff line change
@@ -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`
~~~