ここでは、部分和問題について、 「プログラミングコンテストチャレンジブック(第2版)」の p34 を例に、深さ優先探索(DFS) を使って python3 で実装する方法を紹介します。
 計算量は、O(2^n) です。

# 入力
a = [1, 2, 4, 7]
n = 4
k = 13
# i まででsum(mysum)を作って、残り i 以降を調べる
def dfs(i, mysum):
    # n個決め終わったら、今までの和 mysumが k と等しいかを返す
    if i == n:
        return mysum == k
    # a[i] を使わない場合
    if dfs(i + 1, mysum):
        return True
    # a[i] を使う場合
    if dfs(i + 1, mysum + a[i]):
        return True
    # a[i]を使う使わないに拘わらず k が作れないので false を返す
    return False
    
if __name__ == '__main__':
    if dfs(0,0):
        print('Yes')
    else:
        print('No')