题目
代码如下
package day05;
import java.util.Arrays;
public class 多重部分和问题 {
public static void main(String[] args) {
int n = 3;
int[] a = {3,5,8};
int[] m = {3,2,2};
int K = 17;
boolean k = isK(n, a, m, K);
System.out.println(k);
}
public static boolean isK(int n,int[]a,int[] m,int K){
int[][] dp = new int[n+1][K+1];
dp[0][0]=1;
for(int i=0;i<n;i++){
for(int j=0;j<=K;j++){
for(int k=0;k<=m[i]&&(k*a[i])<=j;k++){
dp[i+1][j] |= dp[i][j-k*a[i]];
}
}
}
for (int i = 0; i < dp.length; i++) {
System.out.println(Arrays.toString(dp[i]));
}
if(dp[n][K]!=0) {
System.out.println("Yes");
return true;
}
else {
System.out.println("No");
return false;
}
}
}