您的位置:首页 > 其它

NYOJ-1058(搜索)-题目----------------------------- 部分和问题

2015-03-07 14:19 423 查看
package org.acm.search;

/*http://acm.nyist.net/JudgeOnline/problem.php?pid=1058*/

//这题和NYOJ927差不多

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;

public class Search_1058 {

private static long n, k, sum;
private static long data[] = new long[21];
private static String result;

public static void main(String[] args) {

Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in)));

while (sc.hasNext()) {
n = sc.nextLong();
k = sc.nextLong();

// 初始化
sum = 0;
result = "";
Arrays.fill(data, 0);
for (int i = 0; i < n; i++) {
data[i] = sc.nextLong();
sum += data[i];
}

if (sum < k)
System.out.println("NO");
else {

if (dfs(0, 0)) {
System.out.println("YES");
System.out.println(result.replaceFirst(" ", ""));
} else
System.out.println("NO");
}
}
sc.close();
}

// 深搜
private static boolean dfs(int p, long s) {

if (s == k)
return true;

if (p >= n)
return false;

if (dfs(p + 1, s + data[p])) {
result = " " + data[p] + result;
return true;
} else {
return dfs(p + 1, s);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM 深搜 部分和问题