从给定的数组arr中选取一个或多个数能否凑出给定的k?
源代码
package com.javakk.ex;
import java.util.Scanner;
/**
* @Time 2018年8月29日 下午5:43:06
* @Title { 凑数K }
* @Desc { 用给定的一个或多个数能否凑出给定的k }
* @Email 92920@sohu.com
* @Author JavaKK
*/
public class Ex1 {
// 给定的数组
static int[] a;
// 数的个数
static int n;
// 给定的k值
static int k;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
scanner.nextLine();
a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
scanner.nextLine();
k = scanner.nextInt();
if (dfs(0,0)){
System.out.println("Yes");
}else {
System.out.println("No");
}
}
private static boolean 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;
}
}