250324 Parcel

Jongleee·2025년 3월 24일
0

TIL

목록 보기
847/861
public static void main(String[] args) throws Exception {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

	StringTokenizer st = new StringTokenizer(br.readLine());
	int w = Integer.parseInt(st.nextToken());
	int n = Integer.parseInt(st.nextToken());

	int[] numbers = new int[n];
	boolean[] possibleSums = new boolean[400001];

	st = new StringTokenizer(br.readLine());
	for (int i = 0; i < n; i++) {
		numbers[i] = Integer.parseInt(st.nextToken());
	}

	boolean isPossible = canFormTargetSum(w, numbers, possibleSums, n);

	bw.write(isPossible ? "YES\n" : "NO\n");
	bw.flush();
	bw.close();
	br.close();
}

private static boolean canFormTargetSum(int w, int[] numbers, boolean[] possibleSums, int n) {
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			int currentSum = numbers[i] + numbers[j];
			if (currentSum >= w || w - currentSum > 400000)
				continue;
			if (possibleSums[w - currentSum])
				return true;
		}
		for (int j = 0; j < i; j++) {
			possibleSums[numbers[i] + numbers[j]] = true;
		}
	}
	return false;
}

출처:https://www.acmicpc.net/problem/16287

0개의 댓글

관련 채용 정보