砝码称重2

【题目描述】

有n个砝码,现要称一个质量为m的物体,询问最少需要挑出几个砝码来称,一个砝码最多只能挑一次。

【输入描述】

第一行输入两个整数n和m;

接下来n行,每行输入一个整数表示砝码的重量。

【输出描述】

输出一个整数表示最少需要的砝码数。

【样例输入】

3 10

5

9

1

【样例输出】

2

【数据范围及提示】

1 <= n <= 30,1 <= m <= 231,1 <= 每个砝码的质量 <= 230

源代码:#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int m,n,L1=1,L2=1,Min=1000000000,i[31];
struct Node
{int Sum,Weight;
}F1[400000],F2[400000]; //计算好情况数目,别想当然。
int Rule(Node t1,Node t2)
{return t1.Weight<t2.Weight;
}
void DFS1(int t,int S,int W) //t代表当前砝码编号,S代表已使用的砝码数量,W代表已使用的砝码总重。
{if (t>(n>>1))return;F1[++L1].Sum=S+1;F1[L1].Weight=W+i[t];DFS1(t+1,S+1,W+i[t]); //取还是不取。DFS1(t+1,S,W);
}
void DFS2(int t,int S,int W) //同理于上。
{if (t>n)return;F2[++L2].Sum=S+1;F2[L2].Weight=W+i[t];DFS2(t+1,S+1,W+i[t]);DFS2(t+1,S,W);
}
int Find(int t) //排序之后,二分查找。
{int Left=0,Right=L2,Mid=L2>>1;while (Left<=Right){if (F2[Mid].Weight>t){Right=Mid-1;Mid=(Left+Right)>>1;}if (F2[Mid].Weight<t){Left=Mid+1;Mid=(Left+Right)>>1;}if (F2[Mid].Weight==t)return Mid;}return -1;
}
int main() //然而并没有用到Hash。
{scanf("%d%d",&n,&m);for (int a=1;a<=n;a++)scanf("%d",&i[a]);sort(i+1,i+n+1);DFS1(1,0,0);sort(F1+1,F1+L1+1,Rule);DFS2((n>>1)+1,0,0);sort(F2+1,F2+L2+1,Rule);for (int a=1;a<=L1;a++){int t=Find(m-F1[a].Weight);if (t!=-1) //符合条件。Min=min(Min,F1[a].Sum+F2[t].Sum);}printf("%d",Min);return 0;
}/*解题思路:本质上就是定义一个左根堆和一个右根堆,这样可以节省很多空间。之所以排序,是为了保证二分的正确性,然后进行查找匹配。
*/

转载于:https://www.cnblogs.com/Ackermann/p/5903333.html

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

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

相关文章

给图片下方加水印_别再看不起美图秀秀啦,想要做长图,批量加水印,用它超级方便...

Hello大家好&#xff0c;我是撒娇的小肉片。时隔超长时间的更新&#xff0c;不知道还有多少人记得我哈哈。今天想要和大家分享的是如何批量加水印&#xff0c;如何拼成长图&#xff0c;操作简单&#xff0c;你值得拥有哦~最重要的是免费&#xff01;免费&#xff01;完全免费&a…

加载顺序_Java的web.xml组件加载顺序

在配置项目组件的过程中&#xff0c; 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持&#xff0c; 数据库的加载肯定要在框架组件加载之前。经过查阅和Debug发现&#xff0c; web.xm组件加载顺序为&#xff1a;context-param -> listene…

20145326蔡馨熠《信息安全系统设计》第2周学习总结

20145326蔡馨熠《信息安全系统设计》第2周学习总结 教材学习内容总结 一、计算机系统与链接 信息就是位上下文&#xff0c;都是由一串位表示的&#xff0c;区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。ASCII字符构成的文件是文本文件&#xff0c;所有其他文件…

c#解析json字符串数组_C#解析JSON字符串总结

JSON文件读取到内存中就是字符串&#xff0c;.NET操作JSON就是生成与解析JSON字符串。操作JSON通常有以下几种方式&#xff1a;1. 原始方式&#xff1a;按照JSON字符串自己来解析。2. 通用方式【★★★★★】&#xff1a;这种方式是使用开源的类库Newtonsoft.Json(下载地址http…

/etc/fstab 文件配置项简单介绍

Untitled本文来源&#xff1a;https://wiki.archlinux.org/index.php/Fstab_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 查看文件系统分区表。fstab 全称为file systems table cat /dev/fstab /etc/fstab# <file system> <dir> <type> <…

为什么不敢和别人竞争_净空法师开示:学老实,在社会上不能跟人竞争吗? - 如是我闻佛教网...

净空法师开示 - 学老实&#xff0c;在社会上不能跟人竞争吗&#xff1f;下面&#xff0c;「又《十住毘婆沙论》曰&#xff1a;若人疾欲至不退转地者&#xff0c;应以恭敬心&#xff0c;执持称名号。」这几句话在这个地方提醒我们&#xff0c;假使有个人想很快速就能得到不退转…

python中a and b什么意思_Python中的a+=b和a=a+b之间的区别是什么?

我一直以为ab和aab是一样的&#xff0c;毕竟效果是一样的嘛。后来我发现并不是这么回事&#xff1f;我发现当变量是不可变对象时&#xff0c;ab和aab是一样的&#xff0c;不过我注意到了前后两个a已经不是同一个对象了。而当变量是可变对象时&#xff0c;虽然ab和aab的效果是一…

快速提高 Vi/Vim 使用效率的原则与途径

Vi/Vim 是所有 Unix/Linux 操作系统默认配备的编辑器。因其强大的功能和高效的操作&#xff0c;Vi/Vim 也成为众多 Unix/Linux 用户、管理员必须掌握并熟练使用的编辑工具之一。尤其是在没有图形界面的情况下&#xff0c;更是离不开 Vi/Vim。Vi/Vim 命令非常多、用法极为灵活&a…

5和6 objbc oracle_Oracle测试题

1) PL/SQL块中可以使用下列(BC)命令。(选择两项)a) TRUNCATEb) DELETEc) SA VEPOINTd) ALTER TABLE2) 授予sa用户在SCOTT.EMP表中SAL列的更新权限的语句是()〔选择一项〕a) GRANT CHANGE ON SCOTT.EMP TO SAb) GRANT UPDA TE ON SCOTT.EMP(SAL) TO SAc) GRANT UPDA TE (SAL) ON…

Bash 入门教程10-处理用户输入

用户输入参数是程序运行的必要条件&#xff0c;如何在Bash中调用输入的参数&#xff0c;将Bash和GCC联合调试&#xff0c;这是linux工程师必备的一个能力。 $./shawn 10 30 这是一个很典型的例子&#xff0c;后面两个就是传入bash的命令行参数。 bash shell 会将一些成为位置参…

存放在外存上的数据关机后_小鑫话题 | 惊了!关机后SSD会丢数据?

今天小鑫在群里看到一个很有趣的话题&#xff0c;是关于SSD和HDD哪个更好的讨论。这个话题小鑫都已经见过不下十次了&#xff0c;但是今天小鑫看到了一句以前从没有看到的言论。(某交流群截图)看到这里&#xff0c;小鑫觉得网络上的“标题党”&#xff0c;可能已经在大做文章了…

python:装饰器

1.情景引入。 现在已经完成了一个python项目&#xff0c;但是我们为了安全起见&#xff0c;我们需要加入验证机制。不是所有人都能调用函数 原始源代码def f1():print f1def f2():print f2def f3():print f3 由于必须遵循开发闭包的原则&#xff0c;所以我们应该尽可能的是不去…

mysql sys exec_python - 使用MySQL UDF执行命令-sys_exec不起作用 - 堆栈内存溢出

我正在尝试从MariaDB服务器运行python脚本。 我已经为此安装了mysqludf库。 我正在尝试使用sys_exec函数运行脚本&#xff0c;但是没有结果。 我已经创建了测试文件&#xff0c;它只是一个带有信息“ DONE”的.txt文件。我以root用户身份执行命令&#xff0c;因此我拥有所有特权…

2、Redis入门介绍

1、什么是Redis Redis&#xff1a;REmote DIctionary Server(远程字典服务器) 是完全开源免费的&#xff0c;用C语言编写的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的(key/value)分布式内存数据库&#xff0c;基于内存运行。并支持持久化的NoSQL数据库&#xff0c;是当…

Coursera公开课-Machine_learing:编程作业7

这周的编程作业主要是两方面内容。 1.K-means聚类。 2.PCA&#xff08;Principle Component Analys&#xff09;主成分分析。 方式主要是通过对图像的聚类实现压缩图像&#xff0c;后来发现PCA也可以通过对主特征值的提取实现压缩图像的目的。很有意思&#xff0c;具体的内容参…

CF722D. Generating Sets[贪心 STL]

D. Generating Setstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a set Y of n distinct positive integers y1, y2, ..., yn. Set X of n distinct positive integers x1, x2, ..., xn is sa…

mysql sql running no_【MySql】复制出现Slave_SQL_Running: No 错误解决

收到报警&#xff0c;mysql的从数据库在同步的过程出现问题&#xff0c;已停止同步。ERROR] Slave SQL: Error "Lock wait timeout exceeded; try restarting transaction" on query. Default database: "yang". Query: "UPDATE workitem SET statu…

使用VS2010调用matlab的mat格式文件

做实验需要将matlab实现的meanshift的结果中的region的Iabels矩阵&#xff0c;需要把labels.mat读入VS2010中&#xff0c;实现功能&#xff0c;在此把实现过程记录下来。 C读取mat文件的步骤如下。 1. vs2010的配置 新建一个工程&#xff0c;在属性管理器中选择 工程->属性-…

mysql 中间件 atlas_Mysql中间件代理 Atlas

本文接上文介绍atlas的安装配置&#xff0c;以及借助keepalive软件实现altas的ha&#xff0c;避免由于atlas故障&#xff0c;导致数据库服务中断的情况出现&#xff1a;一&#xff1a;环境介绍Atlas 主&#xff1a;192.168.1.12/24Atlas 从&#xff1a;192.168.1.81/24Atlas vi…

nodejs mysql事务处理_关于NodeJs如何使用Mysql模块实现事务处理实例

本篇文章主要介绍了NodeJs使用Mysql模块实现事务处理 &#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来看看吧依赖模块&#xff1a;1. mysqlnpm install mysql --save2. asyncnpm install async --save(ps: async模块可…