TYVJ 1340 折半暴搜+二分
思路: 
1. 
这 题   不卡常过不去啊…… 
(先加一个random_shuffle) 
首先 我们可以折半   搜这一半可以到达的重量 sort一遍
然后搜另一半 对于路程中每一个解 我们可以二分前一半中加这个解最接近w的值,更新ans
剪枝: 
对于第一次搜索  显然的剪枝:和不能大于w 
对于第二次搜索  如果当前的解小于最大的remain 退出
我的搜索纯凭运气&数据…… 数据和w相差比较小就能过。 
2. 
LH大爷的思路(可惜T了…)(这题不卡数据是人?) 
也是折半 
然后二进制枚举每个选不选 
s[i]表示 
对于每个i s[i^ (1<< lowbit(i))]的值肯定是已知的。 
s[i]=s[(i xor (1<<(f[i]-1)))]+a[f[i]] 
sort一遍s 
后面枚举 同理 二分同上… 
然而t了。。
(感谢lydrainbowcat&LH大爷……)
//By SiriusRen
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
unsigned int n,w,a[66],half,maxx,ans=0x3fffffff;
unsigned int s[20000000],top;
inline void dfs(int x,int remain){
    s[top++]=remain;
    for(int i=x;i>=1;i--){
        int t=remain-a[i];
        if(t>=0)dfs(i-1,t);
    }
}
inline void dfs2(int x,int tot){
    if(s[top]>=tot){
        int t=lower_bound(s,s+top,tot)-s,jy=s[t]-tot;
        if(ans>jy)ans=jy;
        for(int i=x;i>=half;i--)
            dfs2(i-1,tot+a[i]);
    }
}
int main(){
    scanf("%d%d",&w,&n);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    half=(n+1)/2;
    random_shuffle(a+1,a+1+n);
    dfs(half,w);
    sort(s,s+top);
    half++;top--;
    dfs2(n,0);
    cout<<w-ans;
}
TYVJ 1340 折半暴搜+二分的更多相关文章
- P3067 [USACO12OPEN]平衡的奶牛群(折半暴搜)
		
暴搜无疑.... 首先考虑纯暴搜...... 考虑每一个数: 选在左边集合 选在右边集合 不选 一共三种情况,用一个数组记录搜到的答案,所以暴搜是3^N的复杂度...直接死亡 于是讲折半暴搜.... ...
 - P4799 [CEOI2015 Day2]世界冰球锦标赛(折半暴搜)
		
题目很明确,不超过预算的方案数.两个直觉:1.暴搜2.dp 每个点两种状态,选或不选.... 1.可过20% 2.可过70% 正解:折半搜索(meet in the middle) 有点像以前的双向广 ...
 - BZOJ 4800 折半暴搜
		
思路: 把它拆成两半 分别搜一发 两部分分别排好序 用two-pointers扫一遍 就可以了. (读入也要用long long) //By SiriusRen #include <cstdi ...
 - hdu 4400 离散化+二分+BFS(暴搜剪枝还超时的时候可以借鉴一下)
		
Mines Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
 - 【BZOJ-3033】太鼓达人     欧拉图 + 暴搜
		
3033: 太鼓达人 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 204 Solved: 154[Submit][Status][Discuss] ...
 - c++20701除法(刘汝佳1、2册第七章,暴搜解决)
		
20701除法 难度级别: B: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 输入正整数n,按从小到大的顺序输出所有 ...
 - Codeforces Round #238 (Div. 2)  D. Toy Sum 暴搜
		
题目链接: 题目 D. Toy Sum time limit per test:1 second memory limit per test:256 megabytes 问题描述 Little Chr ...
 - poj 3080 Blue Jeans(水题 暴搜)
		
题目:http://poj.org/problem?id=3080 水题,暴搜 #include <iostream> #include<cstdio> #include< ...
 - Sicily1317-Sudoku-位运算暴搜
		
最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1317.c 这题博主刷了1天,不是为了做出来,AC ...
 
随机推荐
- 图片3d轮放查看效果
			
本功能比較简单,就是一个大幕.左右滚动播放图片. 关键点在于怎样实现平滑的滚动,包含动画效果,3d效果等. <style> img { position: absolute; top:20 ...
 - U盘无法格式化的恢复
			
昨天装Ubuntu的系统可能把U盘搞崩溃了.然后今早起来U盘无法识别,格式化也不行,用Windows的磁盘管理工具格式化说是:Windows无法格式化U盘. 曾经没遇到这样的情况,所以百度了一下,试了 ...
 - 为QML创建C++插件(下载)
			
版权声明:本文为博主原创文章,欢迎转载,转载请注明出处 https://blog.csdn.net/MatchYang/article/details/54564462 1. 为QML创建C++插件的 ...
 - node16---cookie session
			
03.js var express = require("express"); var app = express(); var db = require("./mode ...
 - GitHub客户端和Shell的基本操作和理解
			
GitHub客户端和Shell指令的简单实用 客户端操作, web端操作, shell指令操作. 掌握了这三种操作,基本上就可以很好的运用gitHub了. 创建项目, 可以通过web端进行创建. 可以 ...
 - vue平行组件传值   params
			
欢迎加入前端交流群交流知识&&获取视频资料:749539640 需要传值的组件组件: <template> <div> <router-link :to= ...
 - Kali linux 2016.2(Rolling)中的Exploits模块详解
			
简单来将,这个Exploits模块,就是针对不同的已知漏洞的利用程序. root@kali:~# msfconsole Unable to handle kernel NULL pointer der ...
 - Generating SSH Keys for github
			
由于最近电脑重装了Windows 8.1, 想用github维护一些代码.故不得不重新生成一下ssh key. 按https://help.github.com/articles/generating ...
 - eclipse的springMVC环境搭建并输出HelloWorld
			
spring简单介绍:https://www.cnblogs.com/package-java/p/10368672.html 1.创建一个Maven Project项目 点击下一步 点击下一步 2. ...
 - PHP SOAP模块的使用方法:NON-WSDL模式
			
PHP SOAP扩展可以帮助我们很轻松的实现web service服务,在PHP的SOAP扩展中主要有两种操作模式:WSDL模式和NON-WSDL模式,前者通过使用WSDL文件名作为参数,并从 WSD ...