部分和 dfs
给定一个序列a1,a2…,an判断是否可以从中选出若干个数,使它们的恰好为k,
1<=n<=20
-108<=ai<=108;
-108<=K<=108;
样例:
输入
n=4
a={1,2,4,7}
k=13
输出
Yes(13=2+4+7)
import java.util.*;
public class _部分和 {
public static int kk;//用了拷贝k的
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int arr[] = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i]=sc.nextInt();
}
int k=sc.nextInt();
kk=k;
//arr是数组 k是还要组合的数量 0是当前选择的状态 ArrayList是用来保存选择的数字的
dfs(arr,k,0,new ArrayList<Integer>());
}
private static void dfs(int[] arr, int k, int cur, ArrayList<Integer> arrayList) {
if(k==0) {//刚好可以组合
System.out.print("Yes("+kk+