热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

砝码称重问题:1449贪心算法高效解决1秒内完成

题目1449砝码称重问题通过高效的贪心算法在1秒内成功解决。给定三种不同重量的砝码\(w_0\)、\(w_1\)和\(w_2\),每种砝码各有一个。本题要求判断是否能够使用这些砝码组合出一个特定的重量\(m\)。通过示例解析,详细展示了如何利用贪心策略快速找到解决方案。

1449 砝码称重
1 秒 131,072 KB 40 分 4 级题
现在有好多种砝码,他们的重量是 w0,w1,w2,... 每种各一个。问用这些砝码能不能表示一个重量为m的东西。

样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中。

思路:

w进制算法,
如果没有天平,只是这些砝码表示m的话,只需要将m表示成w进制数,然后要求每一位不是0就是1.(每个质量的砝码只有一个,要么放,要么不放)
现在有这个天平,n这个数就是 两个 0 1 组成的数之差
因为有借位问题,相差为1是可以的
即只有下面四种情况:

0-0=0 1-0=1 0-1=w-1(向高位借一后) 1-1=0

分为三大类:

第一大类:相应位数之差为0 1的就很明了

第二大类:相应位数之差为w-1的,借位后的那一位在后面给它加上 1 就好了

第三大类:其余情况就是无解了

代码:

package _51_node.greedy;import java.util.Scanner;public class ex_1449 {/*** 1449 砝码称重* 1 秒 131,072 KB 40 分 4 级题*

* w进制算法,* 如果没有天平,只是这些砝码表示m的话,只需要将m表示成w进制数,然后要求每一位不是0就是1.(每个质量的砝码只有一个,要么放,要么不放)*

* 现在有这个天平,n这个数就是 两个 0 1 组成的数之差* 因为有借位问题,相差为1是可以的* 即只有下面四种情况:** 0-0=0 1-0=1 0-1=w-1(向高位借一后) 1-1=0** 分为三大类:** 第一大类:相应位数之差为0 1的就很明了** 第二大类:相应位数之差为w-1的,借位后的那一位在后面给它加上 1 就好了** 第三大类:其余情况就是无解了** @param args*/public static void main(String[] args) {Scanner cin = new Scanner(System.in);int w = cin.nextInt();int n = cin.nextInt();boolean flag = true;while (n != 0) {if (n % w == 0 || n % w == 1) n /= w;else if ((n + 1) % w == 0) n = (n + 1) / w;else {flag = false;break;}}if (flag) System.out.println("YES");else System.out.println("NO");}
}

转:https://www.cnblogs.com/somliy/p/10043786.html



推荐阅读
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文介绍 Java 中如何使用 Year 类的 atMonth 方法将年份和月份组合成 YearMonth 对象,并提供代码示例。 ... [详细]
  • 本文深入探讨了 Java 中 LocalTime 类的 isSupported() 方法,包括其功能、语法和使用示例。通过具体的代码片段,帮助读者理解如何检查特定的时间字段或单位是否被 LocalTime 类支持。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 深入解析Java多线程与并发库的应用:空中网实习生面试题详解
    本文详细探讨了Java多线程与并发库的高级应用,结合空中网在挑选实习生时的面试题目,深入分析了相关技术要点和实现细节。文章通过具体的代码示例展示了如何使用Semaphore和SynchronousQueue来管理线程同步和任务调度。 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 本文将探讨Java编程语言中对象和类的核心概念,帮助读者更好地理解和应用面向对象编程的思想。通过实际例子和代码演示,我们将揭示如何在Java中定义、创建和使用对象。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析ArrayList与LinkedList的差异
    本文详细对比了Java中ArrayList和LinkedList两种常用集合类的特性、性能及适用场景,通过代码示例进行测试,并结合实际应用场景分析其优缺点。 ... [详细]
author-avatar
秀珍冠秋晓雯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有