你有一架天平和 NN 个砝码,这 NN 个砝码重量依次是 W1,W2,⋅⋅⋅,WNW1,W2,···,WN。
请你计算一共可以称出多少种不同的正整数重量?
注意砝码可以放在天平两边。
输入格式
输入的第一行包含一个整数 NN。
第二行包含 NN 个整数:W1,W2,W3,⋅⋅⋅,WNW1,W2,W3,···,WN。
输出格式
输出一个整数代表答案。
数据范围
对于 50%50% 的评测用例,1≤N≤151≤N≤15。
对于所有评测用例,1≤N≤1001≤N≤100,NN 个砝码总重不超过 105105。
输入样例:
3
1 4 6
输出样例:
10
1 = 1;
2 = 6 − 4 (天平一边放 6,另一边放 4);
3 = 4 − 1;
4 = 4;
5 = 6 − 1;
6 = 6;
7 = 1 + 6;
9 = 4 + 6 − 1;
10 = 4 + 6;
11 = 1 + 4 + 6。
ans=0
n=int(input())
w=[0]*(n+100)
f=[[0 for i in range(20)] for j in range(n+10)]#列需要开两倍(因为如果j+w[i]>最大可能的重量,会造成数组越界)
li=list(map(int,input().split()))
m=0#所有物品的重量
f[0][0]=1#1代表这个重量存在,0则代表不存在
for i in range(1,n+1):
w[i]=li[i-1]
m+=w[i]
for i in range(1,n+1):#枚举每一个砝码
for j in range(0,m+1):#枚举每一个可能的大小,最大不会超过所有砝码的大小
if (f[i-1][j]==1 or f[i-1][abs(j-w[i])]==1 or f[i-1][j+w[i]]==1):
f[i][j]=1
for i in range(1,m+1):
if (f[n][i]==1):
ans+=1
print(ans)
print(f)