zoukankan      html  css  js  c++  java
  • 称砝码

    描述

    现有一组砝码,重量互不相等,分别为m1、m2……mn;他们可取的最大数量分别为x1、x2……xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。

    注:

    称重重量包括0

    要对输入数据进行校验

    方法原型:public static int fama(int n, int[] weight, int[] nums)

    知识点 字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归
    运行时间限制 10M
    内存限制 128
    输入

    int n:n表示有多少组重量不同的砝码,1<=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<><=n<=10<>

    int[] weight:表示n组砝码的重量,1<=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<><=mi<=10<>

    int[] num:表示n组砝码的最大数量,1<=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<><=xi<=10<>

    输出

    利用给定的砝码可以称出的不同的重量数

    样例输入 2 1 2 2 1
    样例输出 5
    package com.oj5;
    
    import java.util.Map;
    import java.util.Scanner;
    import java.util.TreeMap;
    
    public class Test {
    	
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		int num = in.nextInt();
    		int[] weights = new int[num];
    		int[] nums = new int[num];
    		int[] flag = new int[1001];
    		for(int i = 0;i < num; i++){
    			weights[i] = in.nextInt();
    		}
    		
    		for(int i = 0;i < num; i++){
    			nums[i] = in.nextInt();
    		}
    		
    //		for(int i = 0;i < flag.length; i++)
    //			System.out.println(flag[i]);
    		
    		flag[0] = 0;
    		for(int i = 0;i < num; i++)
    			for(int j = 1;j <= nums[i]; j++){					//循环砝码个数次数,每次增加一个重量为weights[i]的新砝码
    				int max = flag[0];
    				for(int k = 1;k <= flag[0]; k++){				//新添加一个砝码同以前的已有重量合成的新重量,从1到已有的最大重量开始,添加一个weights[i]重量砝码,看看是否有新重量出现
    					if(flag[k]==1&&flag[k+weights[i]]==0){
    						flag[k+weights[i]] = 1;
    						if(k+weights[i]>max)
    							max=k+weights[i];
    					}
    				}
    				
    				flag[j*weights[i]] = 1;							//单纯j个质量为weight[i]的砝码放在一起产生的新重量
    				
    				flag[0] = max> (j*weights[i])?max:j*weights[i];
    			}
    
    		
    
    		int count = 1;
    		for(int i = 0;i < flag.length; i++)
    			if(flag[i]==1)
    				count++;
    		System.out.println(count);
    	}
    }
    

      

  • 相关阅读:
    JAVA基础学习(7)之函数
    人与神话阅读笔记03
    学习进度八
    人月神话阅读笔记02
    NABCD原则
    人月神话阅读笔记01
    学习进度七
    学习进度六
    梦断代码阅读笔记03
    地铁系统初步思路
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/5394276.html
Copyright © 2011-2022 走看看