这天他又创建了一个新账号,他希望新账号的粉丝数恰好等于
他想知道,他最少需要在几个旧账号发“推荐新账号”的文章,可以使得他的新账号粉丝数恰好为
,除此以外,他可以最多从中选择一个账号多次发“推荐新账号”的文章。
(我们假设所有旧账号的粉丝们没有重叠,并且如果在第
个旧账号的粉丝们推荐了新账号,则新账号会直接涨粉
下取整个,而如果小苯选择在第
个旧账号中多次推荐新账号,那么新账号就可以直接涨粉
。)
输入包含行。
第一行两个正整数,分别表示小苯的旧账号个数,和新账号想要的粉丝数。
第二行个正整数
,表示小苯每个旧账号的粉丝数。
输出包含一行一个整数,表示小苯最少需要发送的推荐文章数,如果无法做到,输出。
5 8 1 2 3 4 10
2
选择第 3 个和第 5 个旧账号,并在第 3 个账号多次发文。
n,x=map(int,input().split())
acc=list(map(int,input().split()))
d=[i//2 for i in acc]
def backpack(n,x,d):
dp=[float('inf')]*(x+1)
dp[0] = 0
for i in range(n):
for j in range(x,d[i]-1,-1):
if dp[j-d[i]]!=float('inf'):
dp[j]=min(dp[j],dp[j-d[i]]+1)
return dp[x]
cases=[]
cases.append(backpack(n,x,d)) #不多次宣传
for i in range(n):
d[i]=acc[i] #第i个账号多次宣传
cases.append(backpack(n,x,d))
d[i]=acc[i]//2 #回溯
ans=min(cases)
if ans==float('inf'):
print(-1)
else:
print(ans)