蒜头君去书店买书,他有 m 元钱,书店里面有 n 本书,每本书的价格为 pi 元。蒜头君很爱学习,想把身上钱都用来买书,并且刚好买 k 本书。请帮蒜头君计算他是否能刚好用 m 元买 k 本书。
输入格式
第一行输入 3 个整数 m(1≤m≤100000000),n(1≤n≤30),k(1≤k≤min(8,n))
接下来一行输入 n 个整数,表示每本书的价格 pi(1≤pi≤100000000)。
输出格式
如果蒜头君能 刚好 用 m 元买 k 本书,输入一行"Yes"
, 否则输出"No"
。
样例输入1
10 4 4 1 2 3 4
样例输出1
Yes
样例输入2
10 4 3 1 2 3 4
样例输出2
No
import java.util.Scanner;
public class Main {
static int k,m,n,flag=0;
static int p[] = new int[32];
static long sum = 0;
static void dfs(int num,long sum,int i){
if(num>k || i>n+1 || sum>m)
return;
if(num==k){
if(sum==m){
flag=1;
return;
}
}// 0 sum 1 --1 p[1] 2--2 --4 p1+p2+p3+p4 5--
else{
dfs(num+1,sum+p[i],i+1);
dfs(num,sum,i+1);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
m = sc.nextInt();
n = sc.nextInt();
k = sc.nextInt();
for(int i=1;i<=n;i++)
p[i]=sc.nextInt();
dfs(0,sum,1);
if(flag==1)
System.out.println("Yes");
else
System.out.println("No");
}
}