题目:
给定N个无重复的正整数,和目标数M,找出N中所有子集,使得每个子集的和是M,对于每个数而言,可以选多次,所有结果子集不能够重复。输入为2行,第一行为N和M,第二行为N个数,输出为总共的子集数。
输入描述
无
输出描述
无
示例1:
输入:
4 7
2 3 6 7
输出:
2
提示
7=7
2+2+3=7
题目解析:
本题是一道简单的递归题目
题目代码:
import java.util.Scanner;
class Main {
static int m;
static int n;
static int ans=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
m=sc.nextInt();
n=sc.nextInt();
int[] arr=new int[m];
for (int i = 0; i < m; i++) {
arr[i]=sc.nextInt();
}
f(0,arr,0);
System.out.println(ans);
}
private static void f(int a, int[] arr, int b) {
if(a==n){
ans++;
return;
}else if(a>n){
return;
}else if(a<n){
for (int i = b; i < m; i++) {
f(a+arr[i],arr,i);
}
}
}
}