题目描述
- 第一行输入一个整数N代表物品数量,第二行输入N个正整数代表每个物品的价值。每个物品不可分割,不能以部分价值分配。问:若要把这些物品等价值的分配给两个人,分配方案的数量是多少?若无法达到分配要求,则输出’No solution!‘(样例如下)
- input:
- output:
python实现
from functools import reduce
def fangan(li):
num = reduce(lambda x,y:x+y, li)
if num % 2 == 1:
return 'No solution!'
target = num // 2
s_num= len(li)
dp = [[0] * (target + 1) for _ in range(s_num+ 1)]
dp[0] = [0] * len(dp[0])
for i in range(len(dp)):
dp[i][0] = 1
for i in range(1, s_num+1):
for j in range(1, target+1):
dp[i][j] = dp[i-1][j] + dp[i-1][j - li[i-1]] if j - li[i-1] >= 0 else dp[i-1][j]
return dp[-1][-1]
n = int(input())
stuffs = list(map(int, input().split(' ')))
print(fangan(stuffs))