牛客-最小邮票数
题目描述
有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。 如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。
输入描述:
有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。
输出描述:
对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。
示例1
输出
复制3
import java.util.Scanner;
public class niuPost {
public static int M;
public static int N;
public static int minNum;
public static void main(String args[]){
Scanner in = new Scanner(System.in);
while(in.hasNextInt()){
M = in.nextInt();//邮票总面值
N = in.nextInt();//邮票张数
minNum = N+1;
int a[] = new int[N];
for(int i=0;i<N;i++){
a[i] = in.nextInt();
}
DFS(a, -1, 0, 0);
if(minNum == N+1)
System.out.println(0);
else
System.out.println(minNum);
}
}
public static void DFS(int a[], int index, int num, int sum){
if(index==N-1){
if(sum==M&&num<minNum)
minNum = num;
return;
}else if(index>=N)
return;
else{
DFS(a, index+1, num+1, sum+a[index+1]);
DFS(a, index+1, num, sum);
}
}
}
浙公网安备 33010602011771号