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. JavaScript(第二十五天)【事件绑定及深入】

    事件绑定分为两种:一种是传统事件绑定(内联模型,脚本模型),一种是现代事件绑定(DOM2级模型).现代事件绑定在传统绑定上提供了更强大更方便的功能.   一.传统事件绑定的问题 传统事件绑定有内联模型 ...

  2. 201621123057 《Java程序设计》第7周学习总结

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 答: ...

  3. swift 编写欢迎界面-- ios开发

    转载自:http://blog.csdn.net/u014455765/article/details/49622947 现在很多iOS开发人员都从oc转向Swift, swift 也必将成为ios开 ...

  4. js 选择图片生成base64数据

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...

  5. jvm垃圾收集器总结jdk1.7

    内存 ● 线程私有:程序计数器,虚拟机栈,本地方法栈 ● 线程共享: 方法区,堆 判断存活算法 ● 引用计数法:无法解决循环引用问题. ● 可达性分析算法: 从GCRoot作为起始点,向下搜索,经过的 ...

  6. Node入门教程(2)第一章:NodeJS 概述

    Node 概述 什么是 Node Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  7. Python基础学习篇章二

    一. Python如何运行程序 1. 在交互模式下编写代码 最简单的运行Python程序的方法是在Python交互命令行中输入程序.当然有很多方法可以开始这样的命令行,比如IDE,系统终端.如果你已经 ...

  8. ESP8266 wifi 模块配置,Wechat+APP控制实现

    首先刷入安信可的AiCloud 2.0 SDK文件,AiCloud 2.0具体信息参见AiCloud 1.0 和AiCloud 2.0对比 APP见如下二维码下载. 1.安信可AiCloud 2.0 ...

  9. React Native学习(九)—— 使用Flexbox布局

    本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...

  10. js控制表格实时编辑

    点击添加,在表格的最后一行添加一行表单元素,右侧按钮变为保存和取消.(点击保存,数据用ajax无刷新添加到界面,点击取消,取消此行的添加.)点击编辑,在本行改为表单,带有原来的值,右侧按钮变为确认和取 ...