• hdu 4666 Hyperspace


    曼哈顿距离,两个点设为(x1,y1),(x2,y2),其距离为|x1-x2|+|y1-y2|

    #include <cstdio>
    #include <set>
    #include <cstring>
    #include <cstdlib>
    using namespace std;
    struct node
    {
        int pos;
        int sum;
        bool operator < (const node &p) const
        {
            return p.sum>sum;
        }
        node (int x,int y)
        {
            pos=x;
            sum=y;
        }
    };
    set<node> s[34];
    int n,m,cnt;
    int f_a[34][5],v[5];
    bool d[60010];
    void dfs(int cur)
    {
        if(cur==m)
        {
            for(int i=0; i<m; ++i) f_a[cnt][i]=v[i];
            s[cnt++].clear();
            return;
        }
        v[cur]=1;
        dfs(cur+1);
        v[cur]=-1;
        dfs(cur+1);
    }
    void solve(int cur)
    {
        for(int i=0; i<cnt; ++i)
        {
            int a=0;
            for(int j=0; j<m; ++j) a+=v[j]*f_a[i][j];
            s[i].insert(node(cur,a));
        }
    }
    void del()
    {
        int sum=0;
        for(int i=0; i<cnt; ++i)
        {
            set<node>::iterator p,q;
            while(s[i].size())
            {
                p=s[i].begin();
                if(d[p->pos]) s[i].erase(*p);
                else break;
            }
            while(s[i].size())
            {
                q=s[i].end();
                --q;
                if(d[q->pos]) s[i].erase(*q);
                else break;
            }
            if(!s[i].size()) continue;
            sum=max(sum,q->sum - p->sum);
        }
        printf("%d
    ",sum);
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            int f,pos;
            cnt=0;
            memset(d,0,sizeof(bool)*(n+1));
            dfs(0);
            for(int i=1; i<=n; ++i)
            {
                scanf("%d",&f);
                if(!f) for(int j=0; j<m; ++j) scanf("%d",&v[j]);
                else
                {
                    scanf("%d",&pos);
                    d[pos]=1;
                }
                if(!f) solve(i);
                del();
            }
        }
        return 0;
    }


  • 相关阅读:
    51nod 1621 花钱买车牌 优先队列
    最大字段和 51nod 1049 水水水水水水水水水水水水
    大数相乘 51nod 1027 水题
    逆序数 51nod 1019 归并 分治
    最长公共子序列 LCS 递归 dp 51Nod 1006
    vc6 字体设置
    自行车维护大全(zz)
    DirectX 9.0 3D游戏开发编程基础 [书评](zz)
    二维线段树
    latex 引用文献 bib
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3341831.html
Copyright © 2020-2023  润新知