部分和问题

来源:互联网 发布:淘宝上在哪里买微信号 编辑:程序博客网 时间:2024/06/05 11:36


///给定a1,a2...an,判断是否可以从中取出若干数,使他们的和恰为k.

#include<iostream>
using namespace std;
int a[10];
int n, k;
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;
}
int main()
{


    cin >> n;
    for(int i=0; i<n; i++)
        cin >> a[i];


    cin >> k;
    int ans=dfs(0,0);
    if(ans)
        cout << "Yes\n";
    else
        cout << "No\n";


    return 0;
}


#include <iostream>
#include<cstring>
using namespace std;
int a[10];
bool vis[10];
int n;
int sum = 0;
int k;


int dfs(int i)
{
    if(i>n)
        return 0;
    if(sum>=k)
        return 0;
    if(vis[i])
        return 0;
    vis[i] = true;
    sum += a[i];


    if(dfs(i+1))
        return sum;
    if(sum == k)
        return sum;


    vis[i] = false;
    sum -= a[i];
    if(dfs(i+1))
        return sum;
    return 0;


}

int main()
{
    memset(vis,false,sizeof(vis));


    cin >> n;
    for(int i=0; i<n; i++) cin >> a[i];


    cin >> k;
    if(dfs(0))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;


    return 0;
}





















0 0
原创粉丝点击