部分和 java代码 初步学习DFS
题目来源
挑战程序设计竞赛(第二版)
语言
java
题目
部分和问题
描述
给定整数 a1, a2, …, an,判断是否可以从中选出若干数,使它们的和恰好为 k。
样例1
输入:
输出:
样例2
输入:
输出:
分析
建议观看这一节课,B站的蓝桥杯算法很美DFS部分和
视频有19分钟,静下心来看完,就可以了解了
import java.util.Scanner;
public class 部分和问题 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = input.nextInt();
}
int k = input.nextInt();
boolean [] vis=new boolean[n];
dfs(k,n-1,arr,vis);
}
static void dfs(int k,int i,int[]a,boolean[] vis) {
if(k==0||k-a[0]==0&&i==0) {
for(int j=0;j<vis.length;j++) {
if(vis[j]) {
System.out.println(a[j]);
}
}
System.out.println("yes");
System.exit(0);
}
if(k<0||i==0) {
return;
}
vis[i]=true;
dfs(k-a[i],i-1,a,vis);
vis[i]=false;
dfs(k,i-1,a,vis);
vis[i]=false;
}
}
欢迎大家测试,自己测试的时候有点小问题,我改了一下,暂时没发现问题,但是我还是感觉有点问题