编写一个程序,读取由n个元素和一个整数M组成的序列a,如果可以通过在a中添加元素来生成M,则输出“是”,否则输出“否”。一个元素只能使用一次。
时间: 2023-06-20 07:03:30 浏览: 144
以下是一个Python程序,可以实现上述功能:
```python
def can_generate_m(a, m):
n = len(a)
# 初始化一个二维数组dp,dp[i][j]表示前i个元素是否可以组成和为j
dp = [[False for j in range(m+1)] for i in range(n+1)]
# 当j为0时,任何元素都可以组成和为0
for i in range(n+1):
dp[i][0] = True
# 当i为0时,除了和为0的情况,其他都不能组成和
for j in range(1, m+1):
dp[0][j] = False
# 动态规划,填充dp数组
for i in range(1, n+1):
for j in range(1, m+1):
if a[i-1] > j:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = dp[i-1][j] or dp[i-1][j-a[i-1]]
# 返回dp[n][m],表示前n个元素是否可以组成和为m
return dp[n][m]
n = int(input("请输入序列a的长度:"))
a = []
for i in range(n):
a.append(int(input("请输入第{}个元素:".format(i+1))))
m = int(input("请输入整数M:"))
if can_generate_m(a, m):
print("是")
else:
print("否")
```
该程序使用了动态规划算法,时间复杂度为O(nm),可以快速地解决该问题。
阅读全文