zoukankan      html  css  js  c++  java
  • 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;
    }


  • 相关阅读:
    521.最长特殊序列 I
    520.检查大写字母
    459.重复的子字符串
    Java 读取 .properties 文件的几种方式
    Idea 使用教程
    db2 with用法
    DB2 alter 新增/删除/修改列
    Bootstrap treegrid 实现树形表格结构
    Mysql 递归查询
    navicat for mysql 下载安装教程
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3341831.html
Copyright © 2011-2022 走看看