小李买年货

提交数: 519, 通过率: 28.32%, 平均分: 44.03

题目描述:

小李去商店买年货,店里共有n种物品,小李需要购买其中的几种物品各一件。然而商店采用的购买规则比较特殊,只提供m种购买方案,每一种方案是特定的几种物品各一件。本着不浪费不多买的原则,小李思考能否选择其中几种购买方案,使得能够恰好买到所需要的物品。

 

输入格式:

第一行两个整数m 和 n ,表示商店提供的 m 种购买方案 和 总共 n种商品
接下来m行,每行表示商店的一种规定购买方案。
接下来一行,若干个数,每个数字之间用空格隔开,数字不重复且在 1 到 n 范围内

输出格式:

求解可能的购买方案组合,若存在则输出所有方案组合,一行一种方案,按从小到输出,否则输出NO,表示不存在有效的购买方案组合。

数据范围:

n, m <= 20

样例输入:

7 10
2 6
9
3 8
3 5 6
4 5 8
1 4 7 10
4 5 8 9
2 4 5 6 8 9

样例输出:

1 2 5
1 7

提示:

m , n= map( int, input().split()  )
a = [0] * m
b = [0] * m
k=0

def check(x,y):
    result = x & y
    return ________(1)________

for i in range( m ):
    line = input()
    a[ i ] = list( map( int, line.split() ) )
xy = list( map( int,input( ).split() ) )
sta=0
for x in xy:
    sta = sta + 2**(x-1)
for i in range(m):
    for j in   _________(2)___________:
        b[i] = b[i] + 2**(a[i][j]-1)
flag=False

for i in range(1,2**m):
    t=i; zu=0; s= ""; j = 0
    while t>0:
        if t % 2 == 1:
            if check(b[j],zu):break
            zu=zu+b[j]
            s=s+str(j+1) +" "
        t = t//2;j=j+1
    if t==0 and ________(3)________:
        print(s)
        flag=True
if not flag: print("NO")

时间限制: 1000ms
空间限制: 256MB