【贪心算法】POJ-1017

一、题目

Description

A factory produces products packed in square packets of the same height h and of the sizes 11, 22, 33, 44, 55, 66. These products are always delivered to customers in the square parcels of the same height h as the products have and of the size 6*6. Because of the expenses it is the interest of the factory as well as of the customer to minimize the number of parcels necessary to deliver the ordered products from the factory to the customer. A good program solving the problem of finding the minimal number of parcels necessary to deliver the given products according to an order would save a lot of money. You are asked to make such a program.

Input

The input file consists of several lines specifying orders. Each line specifies one order. Orders are described by six integers separated by one space representing successively the number of packets of individual size from the smallest size 11 to the biggest size 66. The end of the input file is indicated by the line containing six zeros.

Output

The output file contains one line for each line in the input file. This line contains the minimal number of parcels into which the order from the corresponding line of the input file can be packed. There is no line in the output file corresponding to the last ``null'' line of the input file.

Sample Input

0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0

Sample Output

2
1

二、思路&心得

  • 题目大意为共有1 * 1、2 * 2...6 * 6的产品各a[i]个,包装袋大小固定为6 * 6,问最少最要多少个包装袋,可以把每个订单中所有产品包装起来。
  • 这个题目有点类似硬币问题,在选择时从最大的6 * 6的产品开始依次往小进行计算。对于6 * 6、5 * 5、4 * 4的产品,各需要包装袋a[6]、a[5]、a[4]个,其中放置5 * 5产品的包装袋可以额外装11个1 * 1的产品,放置4 * 4产品的可以额外装5个2 * 2的产品;对于3 * 3的产品比较特殊,对4取模后,根据余数0、1、2、3分四种情况进行判断,每次选择时尽可能得装入更多的2 * 2的产品再装入1 * 1的产品;对于2 * 2和1 * 1的产品判断较为简单,不再多说。
  • 在做这题时刚开始有点看不懂题意,便看了下discuss区,发现所有人都说这题非常非常难以及细节很多,导致不敢轻易下手。但是思路想清,WA了一两次之后,便AC了,好像也没想象中的那么难。
  • 在网上观摩到大神的极短代码,算法思想非常精辟,特另附上,以供学习。

三、代码

我的渣解法:

#include<cstdio>int a[7];int ans;void solve() {ans += (a[4] + a[5] + a[6]);a[1] -= a[5] * 11;a[2] -= a[4] * 5;if (a[2] < 0) {a[1] += a[2] * 4;}ans += (a[3] / 4 + 1);switch (a[3] % 4) {case 0: {ans --;break;}case 1: {if (a[2] > 0) {a[2] -= 5;if (a[2] < 0) {a[1] += a[2] * 4;}a[1] -= 7;} else {a[1] -= 27;}break;} case 2: {if (a[2] > 0) {a[2] -= 3;if (a[2] < 0) {a[1] += a[2] * 4;}a[1] -= 6;} else {a[1] -= 18;}break;}case 3: {if (a[2] > 0) {a[2] -= 1;a[1] -= 5;} else {a[1] -= 9;}break;}}if (a[2] > 0) {ans += a[2] / 9;if (a[2] % 9 > 0) {ans ++;a[1] -= (9 - a[2] % 9) * 4;         }}if (a[1] > 0) {ans += (a[1] + 35) /36;}printf("%d\n", ans);
}int main () {while (1) {ans = 0;for (int i = 1; i <= 6; i ++) {scanf("%d", &a[i]);}if (!a[1] && !a[2] && !a[3] && !a[4] && !a[5] && !a[6]) break;solve();}return 0;
}

大神的精辟解法:

#include<stdio.h>
int main()
{int n,a,b,c,d,e,f,x,y;int u[4]={0,5,3,1};while(1){scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0)break;n=d+e+f+(c+3)/4;y=5*d+u[c%4];//在已有n个的情况下,能装下y个2*2的if(b>y)n+=(b-y+8)/9;//把多的2*2的弄进来x=36*n-36*f-25*e-16*d-9*c-4*b;if(a>x)n+=(a-x+35)/36;//把1*1的弄进来printf("%d\n",n);}return 0;
}

转载于:https://www.cnblogs.com/CSLaker/p/7295047.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC响应使用案例(带数据页面跳转,快捷访问路径,返回json数据)

页面跳转 转发&#xff08;默认&#xff09; RequestMapping("/showPage1") public String showPage1() {System.out.println("user mvc controller is running ...");// return "WEB_INF/pages/forward:page.jsp";这种方式不支持重定向&#…

HDU 2874 Connections between cities(LCA离线算法实现)

http://acm.hdu.edu.cn/showproblem.php?pid2874 题意&#xff1a; 求两个城市之间的距离。 思路&#xff1a; LCA题&#xff0c;注意原图可能不连通。 如果不了解离线算法的话&#xff0c;可以看我之前博客写的解释http://www.cnblogs.com/zyb993963526/p/7295894.html 1 #in…

SpringMVC中的异步请求-跨域访问

发送异步请求&#xff1a; <%page pageEncoding"UTF-8" language"java" contentType"text/html;UTF-8" %><a href"javascript:void(0);" id"testAjax">访问springmvc后台controller</a><br/> <…

P1080 国王游戏

题目描述 恰逢 H 国国庆&#xff0c;国王邀请 n 位大臣来玩一个有奖游戏。首先&#xff0c;他让每个大臣在左、右手上面分别写下一个整数&#xff0c;国王自己也在左、右手上各写一个整数。然后&#xff0c;让这 n 位大臣排成一排&#xff0c;国王站在队伍的最前面。排好队后&a…

SpringMVC配置静态资源加载, 中文乱码处理,注解驱动

常规配置&#xff08;Controller加载控制&#xff09; SpringMVC的处理器对应的bean必须按照规范格式开发&#xff0c;未避免加入无效的bean可通过bean加载过滤器进行包含设定或排除设定&#xff0c;表现层bean标注通常设定为Controller业务层与数据层bean加载由Spring控制&…

Android App性能測试

一、内存 1、查看单个应用App最大内存限制 Command&#xff1a;adb shell “getprop|grep heapgrowthlimit” C:\Users\hujiachun>adb shell "getprop|grep heapgrowthlimit" [dalvik.vm.heapgrowthlimit]: [128m] 128M是单个APP最大内存限制&#xff0c;假设Dalv…

SpringMVC-HandlerInterceptor拦截器的使用与参数详解

拦截器概念&#xff1a; 拦截器&#xff08; Interceptor&#xff09;是一种动态拦截方法调用的机制&#xff0c;请求处理过程解析核心原理&#xff1a; AOP思想拦截器链&#xff1a;多个拦截器按照一定的顺序&#xff0c;对原始被调用功能进行增强 作用&#xff1a; 在指定的…

使用FindBugs-IDEA插件找到代码中潜在的问题

另一篇使用文档&#xff0c;参照&#xff1a;https://www.cnblogs.com/huaxingtianxia/p/6703315.html 我们通常都会在APP上线之后,发现各种错误,尤其是空指针异常,这些错误对于用户体验来说是非常不好的,但其实大部分的问题,我们都能够提前发现. 在编写代码的过程中,可能不会时…

SpringMVC异常处理 自定义异常

异常处理器 实现HandlerExceptionResolver接口&#xff08;异常处理器&#xff09; Component // 配上注解Spring看到实现了这个接口就知道是异常处理器了 public class ExceptionResolver implements HandlerExceptionResolver {public ModelAndView resolveException(HttpSe…

霍炬:再谈百度:KPI、无人机,以及一个必须给父母看的案例

霍炬&#xff1a;再谈百度&#xff1a;KPI、无人机&#xff0c;以及一个必须给父母看的案例 作者&#xff1a;霍炬。 原文链接&#xff1a;http://www.donews.com/idonews/article/8147.shtm没想到我之前的一篇关于百度的文章引起了这么大的反馈。非常多朋友称赞我写的好&…

使用SpringMVC模拟文件上传与下载案例

文件上传下载 SpringMVC封装了Tomcat的上传文件功能 MultipartResolver接口 MultipartResolver接口定义了文件上传过程中的相关操作&#xff0c;并对通用性操作进行了封装MultipartResolver接口底层实现类CommonsMultipartResovlerCommonsMultipartResovler并未自主实现文件上…

JSR表单校验框架

表单校验的重要性&#xff1a; 表单校验保障了数据有效性、安全性 不适用表单检验数据可以随意输入&#xff0c;导致错误的结果。后端表单校验的重要性&#xff0c;比如输入框采集成绩&#xff0c;如果前端做了检验&#xff0c;但是用户比较牛逼&#xff0c;他在地址栏上直接加…

使用Phantom omni力反馈设备控制机器人

传统的工业机器人普遍采用电机 、齿轮减速器 、关节轴三者直接连接的传动机构&#xff0c;这种机构要求电机与减速器安装在机械臂关节附近&#xff0c;其缺点是对于多关节机械臂&#xff0c;下一级关节的电机与减速器等驱动装置成为上一级关节的额外负载 。这一额外负载带来的负…

Go_配置系统环境MacOS(M1)

在MacOS下和JDK一样&#xff0c;配不配环境其实MacOS都是可以检测的到的&#xff0c;安装好以后直接输入go version是一样可以的&#xff0c;因为都是使用开发工具的&#xff0c;在开发工具里配置的话是样的&#xff0c;如果有习惯的话就配置一下吧 下载安装及配置环境&#xf…

Android setBackgroundResource和setBackgroundDrawable和用法

两个方法的效果是一样&#xff0c;只是区别于效率&#xff01;playBtn.setBackgroundResource(R.drawable.pause_selecor); 从上面可以看出来是从资源文件中获取drawable中的pause_selecor对象&#xff0c;如果是经常要用到的drawable对象&#xff0c;就可以让它成为一个成员变…

Go_变量使用详解

变量 变量的本质是计算机分配的一块内存&#xff0c;用于存放数据&#xff0c;变量是在程序运行过程中&#xff0c;其值可以发生改变的数据&#xff0c;变量属于临时存储&#xff0c;当程序运行结束&#xff0c;存放该数据的内存就会释放&#xff0c;该变量就会随着内存的释放…

硬币找零问题,动态规划基础,百度面试题

问题描述&#xff1a;给出几种面值的硬币&#xff0c;要求用这几种硬币找零出所给零钱数&#xff0c;用的硬币数要最少。 过去我们用过贪心法解决此类问题&#xff0c;包括本人在百度面试时&#xff0c;也是用的贪心法&#xff08;面试官对这个解答不满意&#xff09;&#xff…

Go_数据类型

数据类型&#xff1a; 计算机存储设备最小信息单位是位&#xff08;bit&#xff09;&#xff0c;最小的存储单元是字节&#xff08;byte&#xff09;&#xff0c;占用字节的不同&#xff0c;所表示能存储的数据长度不同。数据类型用来说明数据的数据的结构&#xff0c;便于后面…

HashMap之扰动函数和低位掩码

我们都知道&#xff0c;hashMap在实现的时候&#xff0c;为了寻找在数组上的位置&#xff0c;主要做了两件事 int hash hash(key); int i indexFor(key, table.length); 这个时候得到i才是数组上的位置。 这两个方法详解如下 JDK8对扰动函数的修改&#xff0c;只进行了一次移…

Go_运算符及优先级

运算符&#xff1a; 很久以前&#xff0c;流传程序算法数据这样的说法。算法是什么&#xff1f;通俗点说就是解决问题的过程。小到加法指令&#xff0c;大到成千上万台服务器组成的分布式计算集群。抛去抽象概念和宏观架构&#xff0c;最终都由最基础的机器指令过程去处理不同层…