七夕快乐啊,大半夜的还在这刷题QAQ…
不多说了,上正题
题目:
蒜头君去书店买书,他有 m元钱,书店里面有n本书,每本书的价格为Pi元。蒜头君很爱学习,想把身上钱都用来买书,并且刚好买k本书。请帮蒜头军计算他是否能刚好偶用m元买k 本书。
输入格式
第一行分别代表m,n,k(1<=m<=100000000)(1<=n<=30)(1<=k<=min(8,n))
接下来一行输入n个整数,表示每本书的价格Pi(1<=Pi<=100000000)
输出格式
如果蒜头君能刚好用m元买k本书,输入一行"Yes",否则输出"No"(注意输出格式)。
样例输入:
10 4 4
1 2 3 4
样例输出:
Yes
#include<bits/stdc++.h>
using namespace std;
int m,n,k;
int a[31];
bool istrue = false;
void dfs(int x,int sum,int count)
{
if(x>n||sum>m||count>k)
return;
if(sum==m&&k==count)
{
istrue=true;
return;
}
dfs(x+1,sum,count);
dfs(x+1,sum+a[x],count+1);
}
int main()
{
while(scanf("%d%d%d",&m,&n,&k)==3)
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
istrue=false;
dfs(0,0,0);
if(istrue)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}