1432: 背包again

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 222  Solved: 65

SubmitStatusWeb Board

Description

Gy最近学习了01背包问题,无聊的他又想到了一个新的问题,给定n个物品的价值,和01背包一样,每个物品只能选1次或0次,求最小不能被得到的价值。

Input

第一行一个正整数T(T <= 100),表示有T组数据。

每组数据输入格式如下:

第一行为一个正整数N(N<=100),表示物品个数。

第二行N个正整数,表示每个物品的价值vi(1<=vi<=1000000)

Output

共输出T行,即每组数据相应答案。

Sample Input

2
3
2 4 8
4
1 2 4 8

Sample Output

1
16

可恶的数学题!

二进制表示,例:1=2^0,2=2^1,4=2^2,8=2^3

又二进制的1111=2^3+2^2+2^1+2^0=15;

不难看出,1111(即15以内所有的数)均可以用:2^0,2^1,2^2,2^3的二进制表示出来(1101,1001,1000,0101…………),那一位是1就加上这位代表的值(2^x)

所以证明了结论的正确性!

不难发现,类似于背包的二进制分解,1,2,4,8。......2^n,

对于这类连续的二的次方数,只要是下一个次方数以内的数,均可以用这几个书中的某几个表示出来;

例如    1,2,4,8  则16(不包含16) 以内的数均可以用这几个数表示;

所以打表出这些数,然后与比对,注意坑:要将数据先sort完之后再比对!!!!坑死我了

最后在筛查一下,对于大于maxn的数不必再考虑,找到小于maxn的数后,就让其加上这个值,因为maxn以内的值均可以表示了,

如果再出现一个小于maxn的数a,则maxn+a以内的数也就都可以表示了。

如果a大于maxn的话最小能表示的也是maxn+1还是没maxn小,所以不必考虑。

#include<bits/stdc++.h>
using namespace std;
int p[105]={1};
int main()
{
int t,i,j,n,k,a[105];
for(i=1;i<=27;++i) p[i]=p[i-1]*2;

cin>>t;
while(t--){int maxn=1;
cin>>n;
for(i=1;i<=n;++i) cin>>a[i];
sort(a+1,a+n+1);
for(i=1,j=0;i<=n;++i) if(a[i]==p[j]) {maxn=p[j+1];a[i]=0;++j;}

for(i=1;i<=n;++i){
if(a[i]&&a[i]<maxn) maxn+=a[i];
}
cout<<maxn<<endl;
}
return 0;
}

zzuli 1432(二进制特点)的更多相关文章

  1. 轻院校赛-zzuli 2266: number【用每位的二进制的幂的和来进行hash(映射)处理】

    zzuli 2266: number 大致题意:   给定n,问有多少数对<x, y>满足: x, y∈[1, n], x < y            x, y中出现的[0, 9] ...

  2. Kubernetes 二进制部署

    目录 1.基础环境 2.部署DNS 3.准备自签证书 4.部署Docker环境 5.私有仓库Harbor部署 6.部署Master节点 6.1.部署Etcd集群 6.2.部署kube-apiserve ...

  3. 使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...

  4. 如何开启MySQL 5.7.12 的二进制日志

    1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log   #二进制日志的文件名 server_id=1  #必须指定server_id,这是MySQL ...

  5. 【.net 深呼吸】使用二进制格式来压缩XML文档

    在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小. XmlDicti ...

  6. Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析

    以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...

  7. 浅析MySQL基于ROW格式的二进制日志

    上文分析的二进制日志实际上是基于STATEMENT格式的,下面我们来看看基于ROW格式的二进制日志,毕竟,两者对应的binlog事件类型也不一样,同时,很多童鞋反映基于ROW格式的二进制日志无法查到原 ...

  8. 浅析MySQL二进制日志

    查看MySQL二进制文件中的内容有两种方式 1.  mysqlbinlog 2.  SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offs ...

  9. asp.net将图片转成二进制存入数据库

    一.代码如下 int code = int.Parse(this.TextBox1.Text);//图片编码 string value = this.FileUpload1.PostedFile.Fi ...

随机推荐

  1. 史上最全的HTML和CSS标签常用命名规则

    文件夹主要建立以下文件夹: 1.Images 存放一些网站常用的图片: 2.Css 存放一些CSS文件: 3.Flash 存放一些Flash文件: 4.PSD 存放一些PSD源文件: 5.Temp 存 ...

  2. live555 编译

    项目里面需要简单的rtsp服务器来实现视频预览等功能: rtsp本来不是太复杂的东西,github上有很多功能都比较完善的项目可以随便拿来用,但是测试过程中发现live555还是有性能上的一些差异: ...

  3. (五)使用GitHub的前期准备

    创建账户 创建账号成功后将得到一个个人的公开页面URL:https://github.com/xkfx. 设置头像 设置SSH Key SSH 为 Secure Shell 的缩写. from bai ...

  4. 02: SocketServer服务

    网络编程其他篇 目录: 1.1 SocketServer四种基本流及 异步处理理论部分 1.2 创建socketserver实现: 多客户端并发 1.3 SocketServer实现多并发FTP 部分 ...

  5. 20145307陈俊达《网络对抗》Exp5 MSF基础应用

    20145307陈俊达<网络对抗>Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit就相当于是载具,各式各样的漏洞在 ...

  6. sql注入学习心得与sqlmap使用心得

    做题是最好的老师 首先先来分享一下我用来练手的题目,实验吧中的简单的sql注入1,2,3 不得不说,sql注入真是一个神奇的东西,至少我以前看起来一点头绪都没有的题目能入手了 首先是简单的sql注入3 ...

  7. Educational Codeforces Round 21 Problem A - C

    Problem A Lucky Year 题目传送门[here] 题目大意是说,只有一个数字非零的数是幸运的,给出一个数,求下一个幸运的数是多少. 这个幸运的数不是最高位的数字都是零,于是只跟最高位有 ...

  8. SQL数据插入字符串时转义函数

    函数一: std::string CheckString(std::string& strSource) { std::string strOldValue = "'"; ...

  9. python程序转为exe文件

    python开发者向普通windows用户分享程序,要给程序加图形化的界面(传送门:这可能是最好玩的python GUI入门实例! http://www.jianshu.com/p/8abcf73ad ...

  10. Linux多线程--使用互斥量同步线程【转】

    本文转载自:http://blog.csdn.net/ljianhui/article/details/10875883 前文再续,书接上一回,在上一篇文章:Linux多线程——使用信号量同步线程中, ...