codeforces 550B Preparing Olympiad(枚举)

点击打开链接

题意:n门课,第i门难度为c[i],选择至少两门以上,使得总难度在l与r之间,且最高难度与最低难度之差不低于x。求总方案数


注意到n很小,于是想到可以通过状态压缩枚举每种可能。


# -*- coding: utf-8 -*-
n,l,r,x=map(int,raw_input().split())
c=map(int,raw_input().split())
ans=0
for i in xrange(1<<n):
    a=[]
    for j in xrange(n):
        if (i>>j)&1 :
            a.append(c[j])
    if len(a)>=2 and max(a)-min(a)>=x and sum(a)>=l and sum(a)<=r :
        ans+=1
print ans


你可能感兴趣的:(codeforces 550B Preparing Olympiad(枚举))