华为OJ——称砝码
来源:互联网 发布:音频矩阵处理器 编辑:程序博客网 时间:2024/06/06 00:01
题目描述
现有一组砝码,重量互不相等,分别为m1,m2,m3…mn; 每种砝码对应的数量为x1,x2,x3…xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。
注:
称重重量包括0
方法原型:
public static int fama( int n, int [] weight, int [] nums)
输入描述:
输入包含多组测试数据。
对于每组测试数据:
第一行:n — 砝码种类(范围[1,10])
第二行:m1 m2 m3 … mn — 每个砝码的重量(范围[1,2000])
第三行:x1 x2 x3 …. xn — 每个砝码的数量(范围[1,6])
输出描述:
利用给定的砝码可以称出的不同的重量数
示例1
输入
2
1 2
2 1
输出
5
代码实现:
思路:
①分配一个数组temp[sum+1],初始化temp[0]和temp[sum]为true
②三层for循环:第一层n:表示种类,第二层:每种砝码的个数x,第三层:(int k = sum; k >= m[i]; k–)
③对于第三层循环需要判断temp[k - m[i]],若为true则可以将k放入数组
package cn.c_shuang.demo41;import java.util.*;/** * 称砝码 * @author Cshuang * */public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()){ int n = Integer.parseInt(in.nextLine()); // n 种砝码 String str1 = in.nextLine(); String str2 = in.nextLine(); System.out.println(getNums(n, str1, str2)); } in.close(); } private static int getNums(int n, String s1, String s2) { String[] s1Arr = s1.split(" "); String[] s2Arr = s2.split(" "); int[] m = new int[n]; int[] x = new int[n]; int sum = 0; // 总的重量 for (int i = 0; i < n; i++) { m[i] = Integer.valueOf(s1Arr[i]); // 每种砝码的重量 x[i] = Integer.valueOf(s2Arr[i]); // 每种砝码的数量 sum += x[i] * m[i]; } boolean[] temp = new boolean[sum+1];//能测的质量种类,最多是:总质量+1 temp[0] = true;//质量为0,也为true temp[sum] = true;//质量满了也为true for (int i = 0; i < n; i++) {//砝码的种类数 for (int j = 0; j < x[i]; j++) {//每种砝码对应的个数 for (int k = sum; k >= m[i]; k--) {//总重量往下减 //假设k-m[i]为1,即质量为1的值,已经存在temp数组 //temp[k-m[i]]为true,当前m[i]代表的当前质量,在1的基础上累加是可以的,即累加后的值为k //所以可以设置temp[k]=true,后面依次递归 if (temp[k - m[i]])//递归思想的应用 temp[k] = true;//若质量相同的会被覆盖,所以不用额外处理相同的质量 } } } int count = 0; for (int i = 0; i <= sum; i++) { if (temp[i]) count++; }//找到temp[]为true的,这是可以被称出来的; return count; }}
阅读全文
0 0
- 华为OJ——称砝码
- 华为OJ——称砝码
- 华为oj 称砝码
- 华为oj 称砝码
- 华为oj:称砝码
- 华为oj 称砝码
- [华为OJ] 称砝码
- 【华为OJ】称砝码
- 华为OJ:称砝码
- 华为OJ称砝码
- 华为OJ之称砝码
- 华为OJ 初级:称砝码
- 华为OJ之称砝码
- 称砝码 动态规划 华为OJ
- 华为OJ题目(十):称砝码
- 称砝码 -动态规划 华为OJ
- 华为oj_称砝码
- 华为测试 称砝码
- spring+hibernate junit测试
- Facebook级挑战
- Shader
- PL/SQL中游标的使用
- javascript——js前台用户注册页面校验
- 华为OJ——称砝码
- Http Handler 介绍
- Nginx 访问控制配置
- redis环境搭建
- Unity3D有关内存管理的资料网址
- 【数据库SQL】找到会员卡重复的,保留其中一条数据
- Java基础之private、protected、public和default的区别
- 排序之冒泡排序
- JavaScript DOM编程艺术第七章Ajax学习笔记