题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4666

关于最远曼哈顿距离的介绍:

http://blog.csdn.net/taozifish/article/details/7574294/

别人的解题报告链接:

http://www.cnblogs.com/kuangbin/archive/2013/08/13/3255752.html

我的解释:

先看一对点,两个点的坐标分别为x(x1,x2,x3,….,xk),y(y1,y2,y3,……,yk).

其曼哈顿距离为d = |x1-y1| + |x2-y2| +…..+|xk-yk|.

在去绝对值后,对于点x,一共有2^k种可能的组合。

所以,在求n个点时,用1表示正号,0表示负号,像状态压缩一样,把所有点的可能都存起来 ,求出每个点在每种状态下的值。如下面三个点的坐标为(2,3),(3,4),(4,5)。它有四种状态,四种状态下对应的值为:

(+,+)5, 7,9

(+,-)-1,-1,-1

(-,+)1,1 ,1

(-,-)-5,-7,-9

最大值为在某种状态下的最大值减去最小值。为什么会是同种状态下呢,看上面曼哈顿距离的计算公式能发现,如果|xi-yi|为正,那么化为xi – yi,x和y对应的分量同号,如果为负,那么化为-xi – (-yi),同样是同号的。式子最终将会化成k1*x1+k2*x2 + ``` + kn*xn – (k1*x1+k2*x2+````+kn*xn)。ki为符号,可正可负。

要想使这个式子最大,自然是某种状态下的最大值减最小值。因为|a-b|>=a-b, |a-b|>=b-a.所以虽然有些符号其实是弄错了的,但是不会影响最大值的得出。

注意:这是我第一次使用multiset,关于删除,multiset有至少两种方法,一种是以键值删除,一种是根据迭代器位置删除···

我一激动。用了第一种,结果一直WA···

还有就是关于全局变量和局部变量,如果既定义了k为全局变量,又在main函数中定义了k为局部变量,那么k就是一个局部变量了,编译器对于这种错误是不会报错的····

其实,我不是很理解这个算法,我是抄的····

还有set<int>se.插入后是已经排好序了的,如果想调用其中的最大值,那么应该写

multiset<int>::iterator it;
it = se.end();
--it;
int t2 = (*it);

最小值应该为int t1 = *se.begin();

贴代码:

 #include <cstdio>
#include <set>
#define N 60010
using namespace std;
int x[N][];
int d,k;
multiset<int> ms[];
void solve(int a[],int flag)
{
for(int i=; i<d ; ++i)
{
int s=;
for(int j=; j<k; ++j)
{
if(i&(<<j)) s += a[j];
else s -= a[j];
}
if(flag) ms[i].insert(s);
else
{
multiset<int>::iterator it = ms[i].find(s);
ms[i].erase(it);
}
}
}
int main()
{
// freopen("in.c","r",stdin);
int q;
while(~scanf("%d%d",&q,&k))
{
d = <<k;
for(int i=; i<d; ++i) ms[i].clear();
for(int i=; i<=q; ++i)
{
int od;
scanf("%d",&od);
if(od == )
{
for(int j=; j<k; ++j)
scanf("%d",&x[i][j]);
solve(x[i],true);
}
else
{
int p;
scanf("%d",&p);
solve(x[p],false);
}
int ans =;
for(int j=; j<d; ++j)
{
int t1 = *(ms[j].begin());
multiset<int>::iterator it;
it = ms[j].end();
--it;
int t2 = (*it);
if(t2-t1 > ans) ans= t2-t1;
}
printf("%d\n",ans);
}
}
return ;
}

HDU 4666 最远曼哈顿距离的更多相关文章

  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[最远曼哈顿距离][STL]

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. hdu 4666 Hyperspace(多维度最远曼哈顿距离)

    献上博文一篇http://hi.baidu.com/byplane747/item/53ca46c159e654bc0d0a7b8d 设维度为k,维护(1<<k)个优先队列,用来保存0~( ...

随机推荐

  1. 96D - Police Stations

    96D - Police Stations 思路:bfs,从所有的警察局开始bfs,因为bfs的深度一样,而且题目给的树保证满足条件,所以不用考虑深度. 如果搜索到一个点a,他的下一个点b已经被搜索过 ...

  2. Codeforces 847B - Preparing for Merge Sort

    847B - Preparing for Merge Sort 思路:前面的排序的最后一个一定大于后面的排序的最后一个.所以判断要不要开始新的排序只要拿当前值和上一个排序最后一个比较就可以了. 代码: ...

  3. PHP自带调试函数

    1.var_dump:打印变量的相关信息 $a = array(1, 2, array("a", "b", "c")); var_dump( ...

  4. CRISPR基因编辑

    2007年,一家酸奶公司发现一种细菌拥有抵御病毒的特殊防御机制.2012年,细菌的这种机制就被科学家阐述清楚,2013年这一领域快速增长.它被视为分子生物学的一个奇迹,事实上,它并非仅对生物学家产生革 ...

  5. [INS-20802] Oracle Net Configuration Assistant failed,Caught UnknownHostException

    在64位Centos上安装64的oracle 11g R2,出现错误: [INS-20802] Oracle Net Configuration Assistant failed 根据提示查看日志文件 ...

  6. 『科学计算』通过代码理解线性回归&Logistic回归模型

    sklearn线性回归模型 import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model de ...

  7. TCP/IP四层与OSI七层模型

      OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行实 ...

  8. hpu1165 贪心

    1165: 最少的需求 [贪心] 时间限制: 1 Sec 内存限制: 128 MB 提交: 12 解决: 4 状态 题目描述 小Q开了一家餐厅,最近生意非常火爆. 假设有N N 个预订信息,第i i ...

  9. 第一个 MVC 应用程序(上半部分)(《精通 ASP.NET MVC5》 的第二章)

    本章将使用 ASP.NET MVC 框架创建一个简单的数据录入应用程序. 笔者会将过程分解成一个个的步骤,以便能够看出如何构造 ASP.NET MVC 应用程序.(对于一些未进行解释的内容,笔者提供了 ...

  10. PHP header函数设置http报文头示例详解

    //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Content-type: application/at ...