/* * Author: Yang Pei * Problem: Check K Sum * * Note: * Given an array of non-negative numbers, check if we could use exactly K elements * in the array (each element could only be used once) to get a target sum, we assume * that the given target and k is valide. * * Solution: * Using dp to solve the problem, dp[i][j] means if we could obtain sum i using j * elements, then dp[i][j] |= dp[i-A[k]][j-1]. */ import java.util.*; public class CheckKSum { public static boolean kSum(int[] num, int target, int k) { int n = num.length; boolean[][] dp = new boolean[target+1][k+1]; dp[0][0] = true; for(int i = 0; i < n; i++) { for(int j = target; j >= num[i]; j--) { for(int p = 1; p <= k; p++) { dp[j][p] |= dp[j-num[i]][p-1]; } } } return dp[target][k]; } public static void main(String[] args) { Scanner scan = new Scanner(System.in); while(scan.hasNext()) { int n = scan.nextInt(); int[] num = new int[n]; for(int i = 0; i < n; i++) { num[i] = scan.nextInt(); } int target = scan.nextInt(); int k = scan.nextInt(); System.out.println(kSum(num, target, k)); } scan.close(); } }
2015年1月7日星期三
Check K Sum
订阅:
博文评论 (Atom)
没有评论:
发表评论