[WC 2005]友好的生物
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]友好的生物的更多相关文章
- bzoj5068: 友好的生物
题目链接 bzoj5068: 友好的生物 题解 最大化这个东西\(\sum_{i=1}^{k-1} | a_{x,i}-a_{y,i} | - | a_{x,k}-a_{y,k} |\) 去掉绝对值号 ...
- 洛咕 P4131 [WC2005]友好的生物
洛咕 P4131 [WC2005]友好的生物 首先可以发现\(C\)是没有用的,可以乘进所有的权值里面做 考虑没有最后一维的限制,那么两个生物的友好值就是 \(\sum_{i=1}^k|a_i-b_i ...
- bzoj 5068: 友好的生物
大意: n个生物, 每个生物有k种属性, 友好度通过下式计算. , C为给定非负数组, 求友好度最大值. k比较小, 求的是最大值并且$C_i$非负, 所以可以暴力枚举正负情况去绝对值号. #incl ...
- Luogu4131 WC2005 友好的生物 状压DP
传送门 首先$C_i$是没有意义的,因为可以直接让$d_i \times= C_i$,答案也是一样的 所以我们现在考虑求$(\sum_{i=1}^{K-1} |d_{p,i}-d_{q,i}|) - ...
- 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 ...
- BZOJ5068: 友好的生物(状压 贪心)
题意 题目链接 Sol 又是一道神仙题??.. 把绝对值拆开之后状压前面的符号?.. 下界显然,但是上界为啥是对的呀qwq.. #include<bits/stdc++.h> using ...
- [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} ...
- NOIp2018集训test-9-23
这个NOI模拟题怕是比你们的NOIp模拟题要简单哦.. 友好的生物 应该是一道简单题,但是机房只有辉神一个人想到正解似乎. 被我kd-tree水过去了(这不是kd-tree的裸题吗???(不是)) / ...
- [Z] 北大一牛人生物转申CS的经历
http://www.bdwm.net/bbs/bbscon.php?board=CIS&file=M.1367038121.A&num=626&attach=0&di ...
随机推荐
- Beta 凡事预则立
写在Beta冲刺前 关于组长是否重选的议题和结论 总体结论 组长无需更换 队内无人替代 理由 当前组长能够较好的号召和组织团队成员进行工作 当前组长能够对项目有合理的规划 当前组长被大家一致认可可以继 ...
- C语言第五次作业函数
一.PTA实验作业 题目1: 6-6 使用函数输出水仙花数 1.本题PTA提交列表 2.设计思路 1.narcissistic函数 1.由于number的值后面会变化,所以定义d,e用于储存numbe ...
- 第七次作业:Beta阶段综合报告(Java-Team)
团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://github.com/WHUSE201 ...
- python的Virtualenv
Virtualenv 虚拟的 Python 环境(简称 venv) 是一个能帮助你在本地目录安装不同版本的 Python 模块的 Python 环境,你可以不再需要在你系统中安装所有东西就能开发并测试 ...
- java中DelayQueue的一个使用陷阱分析
最近工作中有接触到DelayQueue,网上搜索资料的时候发现一篇文章谈到DelayQueue的坑.点击打开链接 文中已经总结了遇到坑的地方,还有解决方案.不过我第一眼看一下没弄明白为什么,所以翻了翻 ...
- JAVA_SE基础——66.StringBuffer类 ③
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer). StringBuffer 其实就是一个存储字符 的容器. 容器的具备 的行为 常用方法 String 增加 ap ...
- JAVA_SE基础——46.引用数据类型变量.值交换[独家深入解析]
需求:定义一个函数交换数组中两个元素的位置. code 1: import java.util.*; class Demo3 { public static void main(String[] ar ...
- JAVA_SE基础——23.类的定义
黑马程序员入学blog ... java 面向对象的语言 对象:真实存在的唯一的实物. 比如:我家的狗, 类: 实际就是对某种类型事物的共性属性与行为的抽取. 抽象的概念... 比如说:车 ...
- [Oracle]undo表空间使用量为100%
在Toad中发现undo表空间undotbs1使用量已经达到100%,但是奇怪的是数据库并没有hang住,依然可以正常运转 通过Oracle提供的EM查看undotbs1表空间的使用,也达到了78.8 ...
- istio入门(03)istio的helloworld-场景说明
一.原生应用 四个微服务: python微服务:一个deployment(deployment含有一个pod,pod内含有一个容器) java微服务:三个deployment(deployment含有 ...