HDU 4666 Hyperspace(曼哈顿距离)

时间:2023-03-09 04:30:08
HDU 4666 Hyperspace(曼哈顿距离)

题目链接

这是HDU第400个题。

 #include <cstdio>
#include <cstring>
#include <set>
#include <iostream>
using namespace std;
int p[],qur[][];
int main()
{
int i,j,k,n,m,num;
while(scanf("%d%d",&n,&m)!=EOF)
{
multiset<int> se[];
multiset<int>::iterator it;
for(k = ; k <= n; k ++)
{
scanf("%d",&num);
if(num == )
{
for(i = ; i < m; i ++)
{
scanf("%d",&p[i]);
qur[k][i] = p[i];
}
for(i = ; i < <<m; i ++)
{
int temp = ;
for(j = ; j < m; j ++)
{
if(i&(<<j))
temp += p[j];
else
temp -= p[j];
} se[i].insert(temp);
}
}
else
{
scanf("%d",&num);
for(i = ; i < <<m; i ++)
{
int temp = ;
for(j = ; j < m; j ++)
{
if(i&(<<j))
temp += qur[num][j];
else
temp -= qur[num][j];
}
it = se[i].find(temp);
se[i].erase(it);
}
}
int maxz = ;
for(i = ; i < <<m; i ++)
{
j = (~i)&((<<m)-);
int t1,t2;
it = se[i].end();
it --;
t1 = (*it);
it = se[j].end();
it --;
t2 = (*it);
if(maxz < t1 + t2)
maxz = t1 + t2;
}
printf("%d\n",maxz);
}
}
return ;
}