POJ2926-Requirements,曼哈顿距离。去掉绝对值符号暴力枚举所有情况,神薙!

                                                     Requirements

    好吧,这题我实在想不到什么优化的方法,看了看讨论区,顺便膜拜了一下大牛们,真是神!

    题意:一种属性有5种特征,每种特征有一定的值来表示,定义两个属性间非相似度为对应特征值之差绝对值的和。求非相似度最大的值。

    思路:数据1e5,不用想着瞎暴力了。只有5种特征值,我们可以把绝对值符号去掉于是每种属性有32种情况,每种情况对应着n个属性找出其中的最大最小值再取最大值即可。

const int INF=0x3f3f3f3f;
const int N=1e5+7;
struct node
{
    double a,b,c,d,e;
} s[N];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0; ima) ma=tp1;
                        }
                      tp2=max(tp2,ma-mi);
                    }
    printf("%.2f\n",tp2);//讨论区有大牛因为输出.2lf\n而跪。。。
}
 不知看客注意到了没有,上述说的是: 每种情况对应着n种属性,所以最里层循环是枚举n种属性。而不是每种属性对应着32种情况。说实话博主差点栽在这里。是因为每种情况都要找出n个属性对应这种情况的最大最小值,最后再取最大值。而如果每种属性都枚举32种情况找出的只是单个属性的最大最小值,可以试着把最里层循环放在最外层,第一组样例就可以解释为什么了。

  细节决定成败啊!!

                 

转载于:https://www.cnblogs.com/nyist-TC-LYQ/p/7208147.html

你可能感兴趣的:(POJ2926-Requirements,曼哈顿距离。去掉绝对值符号暴力枚举所有情况,神薙!)