計蒜客 買書 dfs剪枝

#include<iostream>
#include<stdio.h>
using namespace std;
int m,n,k;
int p[30];
bool flag = false;
void dfs(int money,int num,int index){
	if(num==k&&money==0){
		flag = true;
		return ;
	}
	if(flag||num>k||index>n){
		return;
	}
		if(money>=p[index]){
		dfs(money-p[index],num+1,index+1);	
	}
		dfs(money,num,index+1);	
}
int main(){
	//freopen("in.txt","r",stdin);
	cin>>m>>n>>k;
	for(int i=0;i<n;i++){
		cin>>p[i];
	}
	dfs(m,0,0);
	if(flag){
		cout<<"Yes\n";
	}
	else{
		cout<<"No\n";
	}
	return 0;
}