题目描写叙述 Description

有n个砝码,如今要称一个质量为m的物体,请问最少须要挑出几个砝码来称?

注意一个砝码最多仅仅能挑一次

输入描写叙述 Input Description

第一行两个整数n和m。接下来n行每行一个整数表示每一个砝码的重量。

输出描写叙述 Output Description

输出选择的砝码的总数k,你的程序必须使得k尽量的小。

例子输入 Sample Input

3 10
5
9
1

例子输出 Sample Output

2

数据范围及提示 Data Size & Hint

1<=n<=30。1<=m<=2^31,1<=每一个砝码的质量<=2^30

思路:这题刚開始用了搜索。不机智T了又WA了。然后又一次回到二进制枚举上来吧。

刚開始读题的时候想用二进制枚举了,可是无奈n<=30。2^30早就T了,所以用不了二进制枚举。

搜索又T又WA的,然后仅仅好看了一下解题报告。里面说了用二进制枚举,可是分块来枚举就不会T了。呀!真是太机智了大神们!!

由于最多有30个数。而他们的组合都会非常大的,可是假设我们先搞先n/2个数的组合,然后再搞后(n+1)/2个数的组合的话。然后再把前后合成,就不会T了,并且也能够保证前后组合后与标准的组合是一样的。分治的思想。

二进制又进步了非常多,曾经是20下面的才敢二进制枚举。如今20以上的用了分治思想后也能够用二进制枚举了。历害。。!

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
int main()
{
int n,m,a[33],i,j,ans=1000000007;
map<int,int>mm;
cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i];
for(i=1;i<(1<<(int)(n/2+1));i++)
{
int sum=0,cnt=0;
for(j=0;j<n/2;j++)
if(i&(1<<j)) sum+=a[j],cnt++;
if(!mm[sum]||cnt<mm[sum]) mm[sum]=cnt;
}
if(mm[m]) ans=mm[m];
for(i=1;i<(1<<(int)((n+1)/2+1));i++)
{
int sum=0,cnt=0;
for(j=0;j<(n+1)/2;j++)
if(i&(1<<j)) sum+=a[j+n/2],cnt++;
if(sum==m) ans=min(ans,cnt);
if(mm[m-sum]) ans=min(ans,mm[m-sum]+cnt);
}
cout<<ans<<endl;
return 0;
}

最新文章

  1. 山东省第七届ACM省赛------Memory Leak
  2. 特殊字符导致用正则表达式进行字符串替换失败,Java replaceAll()方法报错Illegal group reference
  3. context:component-scan 分析
  4. 深入理解PHP原理之变量作用域
  5. js 月历 时间函数 月份第一天 星期的判断
  6. IP、子网的详述 ——IP分类、网关地址,子网掩码、子网作用(转)
  7. 前端:JS获取单击按钮单元格所在行的信息
  8. 按住ctrl键可以在新窗口打开图片
  9. Asp.Net 常用工具类之加密——对称加密DES算法(2)
  10. web works importScripts
  11. XSD详解一 - 基本概念
  12. FNDCPASS Troubleshooting Guide For Login and Changing Applications Passwords
  13. 《linux就该这么学》第十一节课: 第九章,网卡绑定与sshd服务
  14. linux下目录简介——/SElinux
  15. Spring 的java 配置方式
  16. jQuery Ajax实例各种使用方法详解
  17. 网页异步加载之AJAX理解
  18. C# 防止窗体闪烁
  19. Centos 安装GIT 1.7.1
  20. BETA-2

热门文章

  1. 【UOJ#400】暴力写挂
  2. 【leetcode】1123. Lowest Common Ancestor of Deepest Leaves
  3. iView栅格的使用
  4. javascript 通用定义
  5. python 指定画图分辨率
  6. HDU 2602 Bone Collector (01背包问题)
  7. 解决:使用ajax验证登录信息返回前端页面时,当前整个页面刷新。
  8. 北风设计模式课程---最少知识原则(Least Knowledge Principle)
  9. MySQL主从复制之半同步模式
  10. int 和 字节 相互转换