这是一道非常简单的深度优先搜索的模板题目,对于每个元素,我们可以选择选或不选,这样每个结点可以分支出两个结点。状态转移的量是选出数的和以及当前取舍元素的下标。
import java.util.Scanner;
public class Main {
static int n,k;
static int[] arr;
static boolean flag=false;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
arr=new int[n];
for(int i=0;i<n;i++) {
arr[i]=sc.nextInt();
}
k=sc.nextInt();
dfs(0,0);
if(flag) {
System.out.println("Yes");
}
else {
System.out.println("No");
}
}
public static void dfs(int index,int sum) {
if(sum==k) {flag=true;return;}
if(sum>k||index==n)return;
dfs(index+1,sum+arr[index]);
dfs(index+1,sum);
}
}