2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem
题意:
给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0
例如:3 4
2 3 4
输出:0 0 1
题解:
认真想一下这一道题,首先看到n不是多大就想用dfs(超时),又在dfs的基础上记忆化(超时),大概是我记忆化不完全。又想用01背包,打出来代码后发现s就是体积,但是s的范围太大了,数组存不下 T_T
看题解发现用一个叫 折半枚举(就是一种思想) 和 二进制枚举 的东西
折半枚举:比如有时集合过大无法全部搜索,但刚好只需要他们的和或其他可以处理出的东西,就可以一半一半搜
知道了这两个东西,你就可以先对输入的n个数据中的前一半枚举,并记录他们每一个状态的值;之后再对后一半枚举,如果在枚举过程中时刻和前一半枚举的数据对照一下,找到了满足题意得方式就跳出循环
代码:
1 #include <stdio.h>
2 #include <algorithm>
3 #include <iostream>
4 #include <string.h>
5 #include<math.h>
6 #include<set>
7 #include<map>
8 using namespace std;
9 const int maxn = 105;
10 const int INF=0x3f3f3f3f;
11 const int mod=1000000007;
12 typedef long long ll;
13 ll n,s,a[maxn],p[maxn];
14 int main()
15 {
16 map<ll,string>m1;
17 map<ll,string>m2;
18 scanf("%lld%lld",&n,&s);
19 for(ll i=0;i<n;++i)
20 scanf("%lld",&a[i]);
21 for(ll i=0;i<1<<(n/2);i++)
22 {
23 string vis;
24 ll sum=0;
25 for(ll j=0;j<n/2;j++)
26 {
27 if((i>>j)&1)
28 {
29 sum=sum+a[j];
30 vis.push_back('1');
31 }
32 else vis.push_back('0');
33 }
34 m1[sum]=vis;
35 }
36 for(ll i=0;i<1<<(n-n/2);i++)
37 {
38 string vis;
39 ll sum=0;
40 for(ll j=0;j<n-n/2;j++)
41 {
42 if((i>>j)&1)
43 {
44 vis.push_back('1');
45 sum+=a[n/2+j];
46 }
47 else vis.push_back('0');
48 }
49 m2[sum]=vis;
50 if(m1.count(s-sum))
51 {
52 cout<<m1[s-sum]<<m2[sum]<<endl;
53 break;
54 }
55 }
56 return 0;
57 }
顺便在补充一下位运算:
>> :右移 最高位是0,左边补齐0;最高为是1,左边补齐1
<< :左移 左边最高位丢弃,右边补齐0 (数据没有溢出情况下,右移==除2;左移==乘2)
>>>:无符号右移 无论最高位是0还是1,左边补齐0
2 >> 2 == 4
4 >> 2 ==16
4 << 2 ==1
2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem的更多相关文章
- 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...
- 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第八场)E.Explorer
链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unli ...
随机推荐
- Hbase RIT故障修复
业务场景: RocketMQ+Storm+Hbase 组件版本: RocketMQ:3.4.6 Storm:1.2.1 Hbase:1.2.1 1. 问题描述 4月15号早上发现业务系统前一天数据量明 ...
- 剑指 Offer 27. 二叉树的镜像
同LeetCode226翻转二叉树 1 class Solution { 2 public: 3 TreeNode* mirrorTree(TreeNode* root) { 4 if(root == ...
- kafka安装流程
本文是作者原创,版权归作者所有.若要转载,请注明出处. 安装前的环境准备 1.由于Kafka是用Scala语言开发的,运行在JVM上,在安装之前需要先安装JDK(省略) 2.kafka依赖zookee ...
- 超详细 安装VMware Workstation,并安装WIN10操作系统连接外网 步骤指导
首先下载VMware Workstation15.1版本,我保存在迅雷链接里面,下载速度非常可观. 链接:https://pan.xunlei.com/s/VMRSt6hHMZXEmPZCm6gJcG ...
- PHP设计模式之装饰器模式(Decorator)
PHP设计模式之装饰器模式(Decorator) 装饰器模式 装饰器模式允许我们给一个类添加新的功能,而不改变其原有的结构.这种类型的类属于结构类,它是作为现有的类的一个包装 装饰器模式的应用场景 当 ...
- 日常分享:关于时间复杂度和空间复杂度的一些优化心得分享(C#)
前言 今天分享一下日常工作中遇到的性能问题和解决方案,比较零碎,后续会持续更新(运行环境为.net core 3.1) 本次分享的案例都是由实际生产而来,经过简化后作为举例 Part 1(作为简单数据 ...
- flask文件下载
后端的代码 # coding:utf-8 from flask import Flask app = Flask(__name__) @app.route("/upload", m ...
- centos&linux
who am i 查看是哪一个用户 init 0关机 ifconfig用于配置网络或显示当前网络接口的状态 eth0是网卡的名字 第一行:flags后面的up指的是网卡处于运行状态,running连接 ...
- 参数模型检验过滤器 .NetCore版
最近学习 .NETCore3.1,发现过滤器的命名空间有变化. 除此以外一些方法的名称和使用方式也有变动,正好重写一下. 过滤器的命名空间的变化 原先:System.Web.Http.Filters; ...
- k8s之PV、PVC、StorageClass详解
导读 上一篇写了共享存储的概述以及一个简单的案例演示.这一篇就写一下PV和PVC. PV是对底层网络共享存储的抽象,将共享存储定义为一种"资源",比如Node也是容器应用可以消费的 ...