• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
不会投篮的邢
投篮三不沾
博客园    首页    新随笔    联系   管理    订阅  订阅

牛客-最小邮票数

题目描述

    有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。     如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。

输入描述:

    有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。

输出描述:

      对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。
示例1

输入

复制
10
5
1 3 3 3 4

输出

复制
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);
		}
	}
}

  

posted @ 2021-03-11 21:14  不会投篮的邢  阅读(71)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3