zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴

    算法提高 贪吃的大嘴
    时间限制:1.0s 内存限制:256.0MB
    问题描述
      有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋糕达到这个目的.所以她希望你能设计一个程序帮她决定要吃哪些小蛋糕.
    输入格式
      先输入一行包含2个整数m、n,表示大嘴需要吃美味度和为m的小蛋糕,而小蛋糕一共有n种,下面输入n行,每行2个整数,第一个表示该种小蛋糕的美味度,第二个表示蛋糕店中该种小蛋糕的总数
    输出格式
      输出一行包含一个整数表示大嘴最少需要吃的小蛋糕数量,若大嘴无法通过吃小蛋糕达到m的美味度和,则输出"><“.
    样例输入
    10 2
    4 1
    2 10
    样例输出
    4
    样例输入
    10 2
    4 1
    7 3
    样例输出

    <
    数据规模和约定
      m ≤ 20000,小蛋糕总数量≤50.

    import java.util.Scanner;
    
    
    public class 贪吃的大嘴 {
    	public static void main(String[] args){
    		int[] val = new int[51];//蛋糕的价值
    		int[] num = new int[51];//蛋糕的数量
    		int[] dp = new int[20005];//dp数组,dp[i]表示吃美味度为i的蛋糕最小要吃多少种
    		//输入数据
    		Scanner sc = new Scanner(System.in);
    		String[] s1 = sc.nextLine().split(" ");
    		int m = Integer.parseInt(s1[0]);//美味度
    		int n = Integer.parseInt(s1[1]);//蛋糕种类
    		
    		for(int i=1;i<=n;i++)
    		{
    			String[] s2 = sc.nextLine().split(" ");
    			val[i] = Integer.parseInt(s2[0]);
    			num[i] = Integer.parseInt(s2[1]);
    		}
    		//初始化dp,
    		int inf = 99999999;
    		for(int i = 1;i<=m;i++)
    			dp[i] = inf;
    		dp[0] = 0;
    		//dp过程
    		for(int i = 1;i<=n;i++)
    			for(int j = 1;j<=num[i];j++)
    				for(int k = m;k>=val[i];k--)
    					dp[k] = Math.min(dp[k-val[i]]+1, dp[k]);
    		
    		
    		if(dp[m] == inf)
    			System.out.println("><");
    		else
    			System.out.println(dp[m]);
    		
    	}
    
    }
    
    
  • 相关阅读:
    codeforces A. Chess Placing
    codeforces E. Cyclic Components
    poj1930(小数化分数)
    hdu4497 (正数分解定理+排列组合)
    cf 466 div.2 A. Points on the line
    hdu1576(扩展欧几里得求逆元板子)
    逆元(转载)
    stiring 数..........
    逆元
    矩阵 构造 模板
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948382.html
Copyright © 2011-2022 走看看