献上博文一篇http://hi.baidu.com/byplane747/item/53ca46c159e654bc0d0a7b8d

设维度为k,维护(1<<k)个优先队列,用来保存0~(1<<k)-1 种状态(状态压缩),设状态1为“+”,状态0为“0”。

对于命令0,求出每个状态j的值,并与优先队列(s-j)的top()值相加,计算最大值。

对于命令1,标记消除的点,对每个队列pop()到存在的点。重新算一遍最大值。

 #include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define clr(a,m) memset(a,m,sizeof(a))
using namespace std; const int MAXN=; struct Q{
int t,id;
Q(){}
Q(int _t,int _id):t(_t),id(_id){}
bool operator < (const Q &tmp) const{
return t<tmp.t;
}
}; priority_queue<Q>q[<<];
int vis[MAXN];
int a[],b[<<]; int main()
{
int n,cnt;
while(~scanf("%d%d",&n,&cnt))
{
int op,s=(<<cnt)-;
int ans=;
clr(vis,);
rep(i,,s)
while(!q[i].empty())
q[i].pop();
rep(i,,n){
scanf("%d",&op); if(!op){
rep(j,,cnt-)
scanf("%d",&a[j]);
rep(j,,s){
int ad=;
rep(k,,cnt-){
if(j&(<<k))
ad+=a[k];
else
ad-=a[k];
}
if(!q[s-j].empty()){
ans=max(ans,ad+q[s-j].top().t);
}
b[j]=ad;
}
rep(j,,s)
q[j].push(Q(b[j],i));
}else {
int pos;
scanf("%d",&pos);
vis[pos]=;
rep(j,,s){
while(!q[j].empty()&&vis[q[j].top().id])
q[j].pop();
}
ans=;
rep(j,,s)
if(!q[j].empty()&&!q[s-j].empty())
ans=max(ans,q[j].top().t+q[s-j].top().t);
}
printf("%d\n",ans);
}
}
return ;
}

hdu 4666 Hyperspace(多维度最远曼哈顿距离)的更多相关文章

  1. hdu 4666:Hyperspace(最远曼哈顿距离 + STL使用)

    Hyperspace Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  2. HDU 4666 Hyperspace (最远曼哈顿距离)

    Hyperspace Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  3. HDU 4666 Hyperspace (2013多校7 1001题 最远曼哈顿距离)

    Hyperspace Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Tota ...

  4. [HDU 4666]Hyperspace[最远曼哈顿距离][STL]

    题意: 许多 k 维点, 求这些点之间的最远曼哈顿距离. 并且有 q 次操作, 插入一个点或者删除一个点. 每次操作之后均输出结果. 思路: 用"疑似绝对值"的思想, 维护每种状态 ...

  5. HDU 4666 最远曼哈顿距离

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4666 关于最远曼哈顿距离的介绍: http://blog.csdn.net/taozifish/ar ...

  6. 2018 Multi-University Training Contest 10 CSGO(HDU - 6435)(最远曼哈顿距离)

    有 n 种主武器,m 种副武器.每种武器有一个基础分数k种属性值 X[i] . 选出一种主武器 mw 和一种副武器 sw,使得两种武器的分数和 + 每个属性的差值尽量大.(参考下面的式子) 多维的最远 ...

  7. poj 2926:Requirements(最远曼哈顿距离,入门题)

    Requirements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3908   Accepted: 1318 Desc ...

  8. POJ-2926 Requirements 最远曼哈顿距离

    题目链接:http://poj.org/problem?id=2926 题意:求5维空间的点集中的最远曼哈顿距离.. 降维处理,推荐2009武森<浅谈信息学竞赛中的“0”和“1”>以及&l ...

  9. Codeforces 491B. New York Hotel 最远曼哈顿距离

    最远曼哈顿距离有两个性质: 1: 对每一个点(x,y)  分别计算  +x+y , -x+y , x-y , -x-y 然后统计每种组合的最大值就能够了, 不会对结果产生影响 2: 去掉绝对值 , 设 ...

随机推荐

  1. mongodb 的安装历程

    mongo 安装历程 mongo的安装方法有千万种,只有一种让我觉得还不错,说说安装过程中的一点心德. 方法一:源码安装,千万别用这种方法,尼马我用虚拟机编译了一下午,竟然没有编译完,强制关机,第二天 ...

  2. CentOS安装RockMongo

    rockmongo官网下载页面在这里: http://rockmongo.com/downloads 找到最新版本的下载链接,一般第一个就是: 右键复制url,比如说是这个: http://rockm ...

  3. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    先写我的思路,没有用指针的做法.如果你用的是VC,把第六行去掉. #include<stdio.h> #include<stdlib.h> int main() { setvb ...

  4. C#三种定时器的实现

    http://www.coridc.com/archives/2253.html c#中提供了三种类型的计时器: 1.基于 Windows 的标准计时器(System.Windows.Forms.Ti ...

  5. WinForm 资源文件的使用

    1. 创建资源文件: 2.双击资源文件,打开如下图:添加一个字符串: 名称为cnnstr 值为-- 3.添加文本文件和图像 4. 调用代码 MessageBox.Show(Resource1.cnns ...

  6. linux源代码阅读笔记 fork和execve的区别

    1. man exec就可以知到: The exec() family of functions replaces the current process image with a new proce ...

  7. 树状数组的笔记√(hzwer blog)

    int lowbit(int x) { return x&(-x); } lowbit()的返回值就是 2^k 次方的值. 求数组的和的算法: (1)首先,令sum=0,转向第二步: (2)接 ...

  8. lintcode:合并排序数组 II

    题目: 合并排序数组 II 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A = [1, 2, 3, empty, empty] B = [4,5] 合并之后A将变成[1,2,3,4,5] ...

  9. window下安装composer and yii2

    我的环境是集合包xampp 1,下载composer:下载地址https://getcomposer.org/download/, 点击蓝色字体“Composer-Setup.exe” 2,安装com ...

  10. uCos的多任务实现

    uCos的多任务实现 作为操作系统(OS),最基本的一项服务就是提供多线程,在实时操作系统uCos里,多线程被称为多任务(Task).多任务并不是CPU能真正同时运行多个程序,实际是靠CPU在多个任务 ...