挑战程序设计竞赛 部分和问题 dfs初步尝试

版权声明:《学习技巧》每次使用单边大脑的时间不要太久,连续使用左边大脑30分钟就如同连续使用左臂30分钟一样,周期性的交换让大脑两侧能够轮流休息,左脑活动包括了循序渐进的工作,解决逻辑问题与分析,而右脑活动包括了隐喻,创造性思考,模式匹配和可视化。 https://blog.csdn.net/intmainhhh/article/details/82631140

给定n个整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。

输入:

n=4

a={1,2,4,7}

k=13

输出:

Yes(13=2+4+7)

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn=20+10;
int arr[maxn];
int n,sum,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+arr[i])) return true;
    return false;
}
int solve()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    cin>>k;
    if(dfs(0,0))
        cout<<"Yes\n";
    else
        cout<<"No\n";
}
int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    solve();
}

猜你喜欢

转载自blog.csdn.net/intmainhhh/article/details/82631140
今日推荐