ZOJ2868【折半】
题意:
把一堆数分成两堆,使得两堆的差值最小。
思路:
先把一堆数分成两堆,然后用个set存一堆的所有组合,枚举第一堆的状态,二分查找第二堆接近half_value。
瞎说时间复杂度:O(2^17*34);
(代码来着某位神犇)
#include<iostream>
#include<set>
#include<queue>
#include<cstdio>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
using namespace std;
int n;
vector<int>a,b;
set<int>ss; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int i=0,x,ans=0;
a.clear();b.clear();
scanf("%d",&n);
for(;i<n/2;i++)
{
scanf("%d",&x);ans+=x;
a.push_back(x);
}
for(;i<n;i++)
{
scanf("%d",&x);ans+=x;
b.push_back(x);
}
int half=ans/2,sum,res;
int sz=b.size();
int num=(1<<sz);
ss.clear();
for(i=0;i<num;i++)
{
sum=0;
for(int p=0;p<sz;p++) if(i&(1<<p)) sum+=b[p];
ss.insert(sum);
}
res=-10000000;
sz=a.size();
num=(1<<sz);
set<int>::iterator it;
for(i=0;i<num;i++)
{
sum=0;
for(int p=0;p<sz;p++) if(i&(1<<p)) sum+=a[p];
if(sum>half) continue;
int diff=half-sum;
it=ss.lower_bound(diff);
if((*it)==diff)
{
res=half;
break;
}
if(it==ss.begin()) continue;
it--;
if((sum+(*it))>res)
res=sum+(*it);
}
res=ans-2*res;
printf("%d\n",res);
}
return 0;
}
ZOJ2868【折半】的更多相关文章
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- 基本排序(二)插入排序(直接插入、Shell、折半)
插入排序是常见的内部排序之一.常见的插入排序包括直接插入排序.Shell排序.折半排序.本篇主要介绍这三个排序. 转载请注明出处——http://www.cnblogs.com/zrtqsk/p/38 ...
- 折半查找(java)(边学习边更新)
---恢复内容开始--- class ArrayTest3 { public static void main(String[] args) { //int [] arr=new int[]{54,4 ...
- C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。
作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1) 输入10个无序的整数.(2) 用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3) 要求任意输入一个整数 ...
- 排序系列 之 折半插入排序算法 —— Java实现
基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...
- c语言折半查找
折半查找又称为二分查找,它的前提是线性表中的记录必须是有序的(通常从小到大有序),线性表必须采用顺序存储. 折半查找的基本思想是 : 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等 ...
- 折半算法的C#实现方式-递归和非递归
这个算法,相信大家都懂,但是不真正的手动写一遍,总觉得不得劲.这不,手动写一遍就是有不一样的效果出现了. 往左折半,还是往右走比较简单,其实这两个算法最关键的是:退出条件 min > max ...
- 算法与数据结构之折半查找(C语言)
#include <stdio.h> #include<stdlib.h> int binsearch(int x,int v[],int n);//函数声明 int main ...
- IOS- 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
/*******************************快速排序 start**********************************///随即取 当前取第一个,首先找到第一个的位置 ...
随机推荐
- python之学习
------------------------------------------ 基本语句解析 import:导入某些模块或者文件 import random: 导入生成随机数模块 import ...
- pandas,apply并行计算的一个demo
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2018-10-11 17:55:26 # @Author : Sheldon (thi ...
- cygwin添加到有右键菜单
cygwin添加到有右键菜单 前提 为了在windows中使用cygwin编译指定文件代码更为方便,所以动心思琢磨把cygwin添加到右键菜单,百度了一下,发现很多这样的教程,但是有问题,比如添加了但 ...
- Android Weekly Notes Issue #317
July 8th, 2018 Android Weekly Issue #317 本期主要内容包括"重磅"的Udacity放弃RN(其实是因为他们RN写的那个Feature不要了) ...
- HTML5颜色渐变3D文字特效
在线演示 本地下载
- .NET ViewState对于画面的速度影响
最近开发一个.NET网站,发现有一个画面的交互特别缓慢,查了很多原因都没查到 最后终于知道,是因为画面的ViewState用的过多,其中有一个ViewState保存的数据相对而言比较大,导致了画面的运 ...
- struts2 codebehind + actionPackages 实现Action零配置
1.jar包:struts2-codebehind-plugin-2.2.1.1.jar 2.struts.xml:<!-- codebehind中查找action的返回结果资源时的默认文件夹 ...
- DubboAdmin平台
DubboAdmin部署 将dubbo-admin.war放入到TomcatWebapps目录下,修改dubbo.properties中的Zookeeper连接地址即可. dubbo-admin放到 ...
- ansible mysql模块的使用今年
摘自: https://www.ibm.com/developerworks/cn/linux/1502_lih_ansible/
- Spark- Linux下安装Spark
Spark- Linux下安装Spark 前期部署 1.JDK安装,配置PATH 可以参考之前配置hadoop等配置 2.下载spark-1.6.1-bin-hadoop2.6.tgz,并上传到服务器 ...