Description

$W$ 星球是一个和地球一样气候适宜、物种聚集的星球。经过多年的研究,外星生物学家们已经发现了数万种生物,而且这个数字还在不断增大。

$W$ 星球上的生物很有趣,有些生物之间很友好,朝夕相伴,形影不离;但有些却很敌对,一见面就难免发生战斗。为了能够更好地了解它们之间的友好程度,外星生物学家希望进行一些量化的计算。他们发现,两种生物之间的友好程度和它们的 $K$ 种属性有关,暂且将它们编号为属性 $1$、属性 $2$、……、属性 $K$,这些属性都是可以进行量化的。外星生物学家研究发现,如果前 $K$-$1$ 种属性的差别越大,这两种生物就越友好;但是属性 $K$ 与众不同,这种属性差别越小的两种生物越友好。

因此他们猜想是不是可以用这样一个公式量化两种生物之间的友好程度:$$Friendliness=(\sum_{i=1}^{k-1} C_i*d_i)-C_K*d_K$$

其中 $C_i$ 是非负常数,$d_i$是属性$i$的差别。如果知道了每种生物的各种属性,利用上述公式就很容易算出它们之间的友好程度了。现在,外星生物学家们想问一问:在目前发现的这些生物当中,关系最友好的那对生物是哪一对呢?它们之间的友好程度是多少?

Input

输入文件的第一行是两个整数 $N$ 和 $K$,分别表示目前发现的生物种数和属性的种数。

第二行有 $K$ 个非负整数 $C_i$,即计算友好程度时所需的常数。

接下来的 $N$ 行,描述每种生物,按照先后顺序依次编号为生物 $1$、生物$2$、……、生物 $N$。每一行都有 $K$ 个整数,给出该种生物的各项属性值,按照先后顺序依次编号为属性$1$、属性 $2$、……、属性 $K$。

Output

输出文件包含两行。第一行为两个整数 $i$ 和 $j$($i$ ≠ $j$),表示你所找到的关系最友好的两种生物为生物 $i$ 和生物 $j$。若最友好的不止一对,输出任意一对。

第二行为一个整数,表示生物 $i$ 和生物 $j$ 之间的友好程度。

Sample Input

5 3
1 2 3
-5 3 2
-2 3 0
0 5 9
3 4 -1
-10 -11 7

Sample Output

3 5
36

HINT

【样例说明】

生物 $3$ 和 $5$ 之间的友好程度为$1*|0-(-10)|+2*|5-(-11)|-3*|9-7|$=$36$。

【约定】

○$2$ ≤ $N$ ≤ $100,000$

○$2$ ≤ $K$ ≤ $5$

○$0$ ≤ $C_i$ ≤ $100$。

○每种生物的各项属性值不小于$-10000$ 且不大于 $10000$

○最大的友好程度一定大于 $0$

题解

多年前的一道 $NOIp$ 模拟题。今天拿出来整理一下...题解在这里

 //It is made by Awson on 2018.1.26
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int N = ;
const int INF = 1e9; int n, k, c[], a[N+][], S[];
int ans, la, lb;
struct tt {
int a, b, id;
bool operator < (const tt &x) const {
return b < x.b;
}
}t[N+]; void cal() {
for (int i = ; i <= n; i++) {
t[i].b = S[k]*a[i][k]; t[i].a = ; t[i].id = i;
for (int j = ; j <= k; j++) t[i].a += S[j]*a[i][j];
}
sort(t+, t+n+); int maxn = -INF, maxi = ;
for (int i = ; i <= n; i++) {
if (ans < maxn-t[i].a) ans = maxn-t[i].a, la = maxi, lb = t[i].id;
if (maxn < t[i].a) maxn = t[i].a, maxi = t[i].id;
}
}
void dfs(int cen) {
if (cen > k) {cal(); return; }
S[cen] = -; dfs(cen+);
S[cen] = ; dfs(cen+);
}
void work() {
scanf("%d%d", &n, &k);
for (int i = ; i <= k; i++) scanf("%d", &c[i]);
for (int i = ; i <= n; i++) for (int j = ; j <= k; j++) scanf("%d", &a[i][j]), a[i][j] *= c[j];
dfs(); if (la > lb) Swap(la, lb); printf("%d %d\n%d\n", la, lb, ans);
}
int main() {
work();
return ;
}

[WC 2005]友好的生物的更多相关文章

  1. bzoj5068: 友好的生物

    题目链接 bzoj5068: 友好的生物 题解 最大化这个东西\(\sum_{i=1}^{k-1} | a_{x,i}-a_{y,i} | - | a_{x,k}-a_{y,k} |\) 去掉绝对值号 ...

  2. 洛咕 P4131 [WC2005]友好的生物

    洛咕 P4131 [WC2005]友好的生物 首先可以发现\(C\)是没有用的,可以乘进所有的权值里面做 考虑没有最后一维的限制,那么两个生物的友好值就是 \(\sum_{i=1}^k|a_i-b_i ...

  3. bzoj 5068: 友好的生物

    大意: n个生物, 每个生物有k种属性, 友好度通过下式计算. , C为给定非负数组, 求友好度最大值. k比较小, 求的是最大值并且$C_i$非负, 所以可以暴力枚举正负情况去绝对值号. #incl ...

  4. Luogu4131 WC2005 友好的生物 状压DP

    传送门 首先$C_i$是没有意义的,因为可以直接让$d_i \times= C_i$,答案也是一样的 所以我们现在考虑求$(\sum_{i=1}^{K-1} |d_{p,i}-d_{q,i}|) - ...

  5. BZOJ.5068.友好的生物(思路)

    题目链接 \(Description\) 求\[\max\{\sum_{i=1}^{k-1}(C_i*|a_{x,i}-a_{y,i}|)-C_k*|a_{x,k}-a_{y,k}|\}\] \(So ...

  6. BZOJ5068: 友好的生物(状压 贪心)

    题意 题目链接 Sol 又是一道神仙题??.. 把绝对值拆开之后状压前面的符号?.. 下界显然,但是上界为啥是对的呀qwq.. #include<bits/stdc++.h> using ...

  7. [WC2005]友好的生物

    description 洛谷 求 \[max_{1\le i<j\le n}\{\sum_{s=1}^{k-1}(C_s-|D_{is}-D_{js}|)-(C_k-|D_{ik}-D_{jk} ...

  8. NOIp2018集训test-9-23

    这个NOI模拟题怕是比你们的NOIp模拟题要简单哦.. 友好的生物 应该是一道简单题,但是机房只有辉神一个人想到正解似乎. 被我kd-tree水过去了(这不是kd-tree的裸题吗???(不是)) / ...

  9. [Z] 北大一牛人生物转申CS的经历

    http://www.bdwm.net/bbs/bbscon.php?board=CIS&file=M.1367038121.A&num=626&attach=0&di ...

随机推荐

  1. 集大1513 & 1514班 软件工程第一次作业评分与点评

    谢谢大多数同学按时完成了作业,同学态度都比较端正,没有为了完成作业或者讨好老师而说一些假话空话. 很多同学选择CS之前并没有从兴趣或者擅长出发.这是一个普遍的现象,十年前我们是这样,十年后的孩子们还是 ...

  2. 第1次作业:小菜鸟的平凡IT梦

    #1.结缘计算机的始末 ##1.1与计算机相识的几年 作为一个95后,出生在一个互联网开始兴盛的时代.我记得小学的时候,开始知道电脑这个东西,学校有了机房,开始有了所谓的电脑课.那时候计算机对于我来说 ...

  3. Build to win--来自小黄衫

    写在前面 首先非常荣幸.非常侥幸能以微弱的优势得到这次小黄衫,感谢各位老师同学的帮助,也谢谢来自<构建之法>团队的小黄衫赞助! 这次能够获得小黄衫,就像汪老师上课说的那样,其实,是一个积累 ...

  4. c语言博客第二次作业

    一.PTA实验作业 题目1:计算分段函数[2] 1.实验代码 { double x,y; scanf("%lf",&x); if(x>=0) { y=pow(x,0. ...

  5. 网页设计入门<一>

    俗话说:技多不压身.实习周,网页设计是之一,边学边总结... 本次网页设计基于Adobe Dreamweaver CS6开发平台,根据实习老师的暴力指导,为什么说暴力呢? 没有基础,没有预告,打开软件 ...

  6. Twisted 介绍 及TCP广播系统实例

    twisted 提供更多传输层 udp,tcp,tls及应用层HTTP,FTP等协议的支持,在开发方法上更提供了丰富的特性来支持异步编程 安装twisted 建议使用anaconda 安装,conda ...

  7. 201421123042 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 继承中的关键词:Soper,object,override,project, 1.2 尝试使用思维导图将这些关键词组织起来.注: ...

  8. 一句话了解JAVA与大数据之间的关系

    大数据无疑是目前IT领域的最受关注的热词之一.几乎凡事都要挂上点大数据,否则就显得你OUT了.如果再找一个可以跟大数据并驾齐驱的IT热词,JAVA无疑是跟大数据并驾齐驱的一个词语.很多人在提到大数据的 ...

  9. java实现红包的分配算法

    个人推测,微信红包在发出的时候已经分配好金额.比如一个10元的红包发给甲乙丙三个人,其实在红包发出去的时候,已经确定了第一个会领取多少,第二个会领取多少金额. 而不是在领取的时候才计算的.下面贴出实现 ...

  10. 改变input的placeholder颜色

    input::-webkit-input-placeholder{ color:#666; } input::-ms-input-placeholder{ color:#666; } input::- ...