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

题意:给出若干个n维的点,求它们的最远曼哈段距离。

参考:http://www.cnblogs.com/lmnx/articles/2479747.html

POJ  2926  Requirements:http://poj.org/problem?id=2926

#include<cstdio>
#include<set>
using namespace std;
const int maxn=60000+5;
int a[maxn][7];
int q,k,w;
multiset<int> m[40];

void solve(int s,int flag)
{
    for(int i=0;i<w;i++)
    {
        int sum=0;
        for(int j=0;j<k;j++)
            if(i&(1<<j)) sum+=a[s][j];
            else sum-=a[s][j];
        if(flag) m[i].insert(sum);
        else
        {
            multiset<int>::iterator it;
            it=m[i].find(sum);
            m[i].erase(it);
        }
    }
}
int main()
{

    while(~scanf("%d%d",&q,&k))
    {
        w=1<<k;
        for(int i=0;i<w;i++)
            m[i].clear();
        int c;
        for(int i=1;i<=q;i++)
        {
            scanf("%d",&c);
            if(!c)
            {
                for(int j=0;j<k;j++)
                    scanf("%d",&a[i][j]);
                solve(i,true);
            }
            else
            {
                int t;
                scanf("%d",&t);
                solve(t,false);
            }
            int ans=0;
            for(int j=0;j<w;j++)
            {
                int t1=*(m[j].begin());
                multiset<int>::iterator it;
                it=m[j].end();
                --it;
                int t2=(*it);
                if(t2-t1>ans) ans=t2-t1;
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}
View Code


这个算法还不是很理解。

 posted on 2013-08-18 11:23  ∑求和  阅读(189)  评论(0编辑  收藏  举报