0
点赞
收藏
分享

微信扫一扫

部分和 java代码初步学习DFS

你的益达233 2022-03-30 阅读 24

部分和 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;
	}
}

欢迎大家测试,自己测试的时候有点小问题,我改了一下,暂时没发现问题,但是我还是感觉有点问题

举报

相关推荐

0 条评论