部分和问题

给定整数 a1, a2, a3, ..., an, 判断是否可以从中选出若干数,使他们的和恰好为k。

1 <= n <= 20

-10^8 <= ai <= 10^8

-10^8 <= k <= 10^8

 

int n, k, a[MAX_N];
bool dfs(int i, int sum)
{
    if(i == n) return sum == k;
    if(dfs(i+1, sum)) return true;
    if(dfs(i+1, sum + a[i])) return true;
    return false;
}

void solve()
{
    if(dfs(0,0)) 
        printf("YES\n");
    else
        printf("NO\n");
}

 

 

posted @ 2013-11-06 21:22  alexeyqian  阅读(169)  评论(0编辑  收藏  举报