请继续
时间: 2024-02-18 08:02:43 浏览: 13
```python
n = int(input())
w = list(map(int, input().split()))
c1, c2 = map(int, input().split())
# 动态规划求解
f = [[False] * (c1+1) for _ in range(n+1)]
f[0][0] = True
for i in range(1, n+1):
for j in range(c1, -1, -1):
if j >= w[i-1]:
f[i][j] = f[i-1][j] or f[i-1][j-w[i-1]]
else:
f[i][j] = f[i-1][j]
# 找到第一艘轮船恰好装满的情况
if not f[n][c1]:
print('No solution')
else:
ans1 = []
j = c1
for i in range(n, 0, -1):
if j >= w[i-1] and f[i-1][j-w[i-1]]:
ans1.append(i)
j -= w[i-1]
ans1.reverse()
# 找到第二艘轮船中的集装箱编号
ans2 = [i for i in range(1, n+1) if i not in ans1]
# 输出结果
print(' '.join(str(x) for x in ans1))
print(' '.join(str(x) for x in ans2))
```
时间复杂度为 $O(n c_1)$,其中 $c_1$ 表示第一艘轮船的载重量。