【搜索+set去重】Balance Scale
Balance Scale
题目描述
For work efficiency, a single use of the balance scale should be enough for measurement of each amount. You can use any number of weights at a time, placing them either on the balance plate opposite to the chemical or on the same plate with the chemical. For example, if you have two weights of 2 and 9 units, you can measure out not only 2 and 9 units of the chemical, but also 11 units by placing both on the plate opposite to the chemical (Fig. C-1 left), and 7 units by placing one of them on the plate with the chemical (Fig. C-1 right). These are the only amounts that can be measured out efficiently.

You have at hand a list of amounts of chemicals to measure today. The weight kit already at hand, however, may not be enough to efficiently measure all the amounts in the measurement list. If not, you can purchase one single new weight to supplement the kit, but, as heavier weights are more expensive, you'd like to do with the lightest possible.
Note that, although weights of arbitrary positive masses are in the market, none with negative masses can be found.
输入
n m
a1 a2 ... an
w1 w2 ... wm
The first line of a dataset has n and m, the number of amounts in the measurement list and the number of weights in the weight kit at hand, respectively. They are integers separated by a space satisfying 1 ≤ n ≤ 100 and 1 ≤ m ≤ 10.
The next line has the n amounts in the measurement list, a1 through an, separated by spaces. Each of ai is an integer satisfying 1 ≤ ai ≤ 109, and ai ≠ aj holds for i ≠ j.
The third and final line of a dataset has the list of the masses of the m weights at hand, w1 through wm, separated by spaces. Each of wj is an integer, satisfying 1 ≤ wj ≤ 108. Two or more weights may have the same mass.
The end of the input is indicated by a line containing two zeros.
输出
If all the amounts in the measurement list can be measured out without any additional weights, 0.
If adding one more weight will make all the amounts in the measurement list measurable, the mass of the lightest among such weights. The weight added may be heavier than 108 units.
If adding one more weight is never enough to measure out all the amounts in the measurement list, -1.
样例输入
4 2
9 2 7 11
2 9
6 2
7 3 6 12 16 9
2 9
5 2
7 3 6 12 17
2 9
7 5
15 21 33 48 51 75 111
36 54 57 93 113
0 0
样例输出
0
5
-1
5
【题意】
给你n个重量需要称重,你只有m个砝码。请问是否能买一个最小的砝码来满足n个重量呢?
如果不用买输出0,如果买一个也不能达到效果,输出-1。不然就输出买的最小砝码。
【题解】
1、爆搜出所有情况出来
2、答案肯定是原有能组合出来的集合进行,进行差值处理,每次都取交集。
具体可以看代码实现。
【队友代码】
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll ;
const int N = 1e5 + ;
int a[],w[];
int n,m;
set <int> M, ans; void dfs(int pos,int s1,int t1,int S,int T) {
if( pos == m+ ){
M.insert( abs(S-T) );
return ;
}
dfs( pos + , s1 | <<pos , t1 ,S + w[pos],T );
dfs( pos + , s1, t1 | <<pos ,S ,T + w[pos]);
dfs( pos + , s1 , t1 , S, T );
} int main()
{
while( scanf("%d%d",&n,&m) , (n+m) ){
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=;i<=m;i++){
scanf("%d",&w[i]);
}
M.clear();
dfs(,,,,);
bool flag = ;
auto M_end = M.end();
int res = ;
ans.clear();
for(int i=;i<=n;i++)
{
if( M.find(a[i]) == M_end )
{
flag = ;
if(ans.size()==){
for(auto x : M){
ans.insert(x+a[i]);
ans.insert(abs(x-a[i]));
}
ans.insert(a[i]);
}
else{
for(auto x : ans){
if((M.find(x+a[i])==M_end) && (M.find(abs(x-a[i]))==M_end) && x!=a[i]) ans.erase(x);
}
if(ans.size() == ){
res = -;
break;
}
}
}
}
if( flag ){
printf("0\n");
}else{
if(res!=-){
for(auto x:ans){
res = x;
break;
}
}
printf("%d\n",res);
} //cout << M.size() << endl;
}
return ;
}
【搜索+set去重】Balance Scale的更多相关文章
- js算法初窥03(简单搜索及去重算法)
前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法--顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...
- js算法初窥03(搜索及去重算法)
前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法——顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...
- PostgreSQL 在视频、图片去重,图像搜索业务中的应用
摘要: PostgreSQL 在视频.图片去重,图像搜索业务中的应用作者digoal日期2016-11-26标签PostgreSQL , Haar wavelet , 图像搜索 , 图片去重 , 视频 ...
- 每日英语:Boost Your Balance; Avoid Falls
If you find yourself needing to sit down to take off your shoes, it might be time to start paying at ...
- 48、Spark SQL之与Spark Core整合之每日top3热点搜索词统计案例实战
一.概述 1.需求分析 数据格式: 日期 用户 搜索词 城市 平台 版本 需求: 1.筛选出符合查询条件(城市.平台.版本)的数据 2.统计出每天搜索uv排名前3的搜索词 3.按照每天的top3搜索词 ...
- Robot_bfs
Description The Robot Moving Institute is using a robot in their local store to transport different ...
- Counterfeit Dollar -----判断12枚钱币中的一个假币
Counterfeit Dollar Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u ...
- POJ 1013 Counterfeit Dollar
Counterfeit Dollar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36206 Accepted: 11 ...
- poj1013.Counterfeit Dollar(枚举)
Counterfeit Dollar Time Limit: 1 Sec Memory Limit: 64 MB Submit: 415 Solved: 237 Description Sally ...
随机推荐
- Spring MVC 三大组件
㈠ HandlerMapping 处理器映射(一般通过扫描包配置) 通过处理器映射,你可以将Web 请求映射到正确的处理器 Controller 上.当接收到请求时,DispactherServlet ...
- java——反射
http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html
- yield 异步 并行 Promise await async
yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称.平等的 http://www.geeksforgeeks.org/use-yield-keyword-instead-ret ...
- [Java复习] 多线程 并发 JUC 补充
线程安全问题? 当多个线程共享同一个全局变量,做写的操作时,可能会受到其他线程的干扰.读不会发生线程安全问题. -- Java内存模型. 非静态同步方法使用什么锁? this锁 静态同步方法使用什么 ...
- MySQL批量导入Excel、txt数据
MySQL批量导入Excel.txt数据 我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQ ...
- 123457123457---com.threeapp.ShuiShiYanLiWang01----谁是眼力王
com.threeapp.ShuiShiYanLiWang01----谁是眼力王
- Django之model详解
Django中的页面管理后台 Djano中自带admin后台管理模块,可以通过web页面去管理,有点想php-admin,使用步骤: 在项目中models.py 中创建数据库表 class useri ...
- win7下docker环境安装
最近公司涉及到对docker容器引擎的使用,所以就在网上各种搜索,由于是win7系统,所以在使用上更是麻烦,遇到各种错误就是无法成功启动docker,经过两天的各种尝试下,终于安装成功,在此记录一下使 ...
- NodeJs本地搭建服务器,模拟接口请求,获取json数据
最近在学习Node.js,虽然就感觉学了点皮毛,感觉这个语言还不错,并且也会一步步慢慢的学着的,这里实现下NodeJs本地搭建服务器,模拟接口请求,获取json数据. 具体的使用我就不写了,这个博客写 ...
- Node.js使用supervisor
对代码的修改,每次都要重新启动服务器,使用supervisor它会监视你对代码的改动,并自动重启 Node.js. 1> npm安装: npm install -g supervisor 2&g ...