zoukankan      html  css  js  c++  java
  • HDU 4666 Hyperspace(曼哈顿距离)

    题目链接

    这是HDU第400个题。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <set>
     4 #include <iostream>
     5 using namespace std;
     6 int p[30],qur[60001][6];
     7 int main()
     8 {
     9     int i,j,k,n,m,num;
    10     while(scanf("%d%d",&n,&m)!=EOF)
    11     {
    12         multiset<int> se[40];
    13         multiset<int>::iterator it;
    14         for(k = 1; k <= n; k ++)
    15         {
    16             scanf("%d",&num);
    17             if(num == 0)
    18             {
    19                 for(i = 0; i < m; i ++)
    20                 {
    21                     scanf("%d",&p[i]);
    22                     qur[k][i] = p[i];
    23                 }
    24                 for(i = 0; i < 1<<m; i ++)
    25                 {
    26                     int temp = 0;
    27                     for(j = 0; j < m; j ++)
    28                     {
    29                         if(i&(1<<j))
    30                             temp += p[j];
    31                         else
    32                             temp -= p[j];
    33                     }
    34 
    35                     se[i].insert(temp);
    36                 }
    37             }
    38             else
    39             {
    40                 scanf("%d",&num);
    41                 for(i = 0; i < 1<<m; i ++)
    42                 {
    43                     int temp = 0;
    44                     for(j = 0; j < m; j ++)
    45                     {
    46                         if(i&(1<<j))
    47                             temp += qur[num][j];
    48                         else
    49                             temp -= qur[num][j];
    50                     }
    51                     it = se[i].find(temp);
    52                     se[i].erase(it);
    53                 }
    54             }
    55             int maxz = 0;
    56             for(i = 0; i < 1<<m; i ++)
    57             {
    58                 j = (~i)&((1<<m)-1);
    59                 int t1,t2;
    60                 it = se[i].end();
    61                 it --;
    62                 t1 = (*it);
    63                 it = se[j].end();
    64                 it --;
    65                 t2 = (*it);
    66                 if(maxz < t1 + t2)
    67                     maxz = t1 + t2;
    68             }
    69             printf("%d
    ",maxz);
    70         }
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    Design Thinking 设计思维
    SELECT小技巧
    网站架构
    代码生成器重构
    如何监控你的鼠标
    Asp.net超轻异步框架
    跨线程修改UI控件
    NPOI组件
    浅析Linux计算机工作机制
    VS2010单元测试
  • 原文地址:https://www.cnblogs.com/naix-x/p/3256618.html
Copyright © 2011-2022 走看看