您的位置:首页 > 其它

HDU 4666 Hyperspace(曼哈顿距离)

2013-08-14 10:27 381 查看
题目链接

这是HDU第400个题。

#include <cstdio>
#include <cstring>
#include <set>
#include <iostream>
using namespace std;
int p[30],qur[60001][6];
int main()
{
int i,j,k,n,m,num;
while(scanf("%d%d",&n,&m)!=EOF)
{
multiset<int> se[40];
multiset<int>::iterator it;
for(k = 1; k <= n; k ++)
{
scanf("%d",&num);
if(num == 0)
{
for(i = 0; i < m; i ++)
{
scanf("%d",&p[i]);
qur[k][i] = p[i];
}
for(i = 0; i < 1<<m; i ++)
{
int temp = 0;
for(j = 0; j < m; j ++)
{
if(i&(1<<j))
temp += p[j];
else
temp -= p[j];
}

se[i].insert(temp);
}
}
else
{
scanf("%d",&num);
for(i = 0; i < 1<<m; i ++)
{
int temp = 0;
for(j = 0; j < m; j ++)
{
if(i&(1<<j))
temp += qur[num][j];
else
temp -= qur[num][j];
}
it = se[i].find(temp);
se[i].erase(it);
}
}
int maxz = 0;
for(i = 0; i < 1<<m; i ++)
{
j = (~i)&((1<<m)-1);
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 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: