深搜解题。
/* 问题描述: 部分和问题 给定整数a1,a2....an,判断是否可以从中选出若干数,使它们的和恰好为k。 0<n<21 输入: 4 13 1 2 4 7 输出: YES */ #include<iostream> #define MAX 1000 using namespace std; int a[MAX],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() { int i; cin>>n>>k; for(i=0;i<n;i++) cin>>a[i]; bool ans = dfs(0, 0); if(ans) cout<<"YES"; else cout<<"NO"; cout<<endl; return 0; }