资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。
输入格式
第一行两个整数N,M。
一行N个整数,表示木棍的长度。
输出格式
一行一个整数,表示最小的差距
样例输入
3 2
10 20 40
样例输出
10
数据规模和约定
N, M<=7
# 开发人:HGC
# 开发时间:2021-11-06 14:26
n,m=list(map(int,input().split()))
nums=list(map(int,input().split()))
visited=[0]*n
ans=[0]*m
minnum=float('inf')
def dfs():
global visited,ans,minnum
#print(ans, minnum)
a=[]
for i in ans:
if i!=0:
a.append(i)
if len(a)>0 and len(a)<m:
if minnum < max(a) - min(a):
return
if 0 not in ans and 0 not in visited:
if minnum>max(ans)-min(ans):
minnum=max(ans)-min(ans)
return
for i in range(m):
for j in range(n):
if visited[j]==0:
ans[i]+=nums[j]
visited[j]=1
dfs()
visited[j]=0
ans[i]-=nums[j]
dfs()
print(minnum)
结果:剪枝之后依然超时,只有80分。希望有大佬指点