[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 ...
随机推荐
- String s=new String("abc")创建了几个对象?
String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 答案应该是1个或者2个. 1个 ...
- 【MySql系列】MySql踩坑系列
问题一:远程登录报错Host '192.168.181.201' is not allowed to connect to this MySQL server 解决: 问题二:MySql access ...
- 学号:201621123032 《Java程序设计》第12周学习总结
1:本周学习总结 1.1:以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2:面向系统综合设计-图书馆管理系统或购物车 2.1: 简述如何使用流与文件改造你的系统.文件中数据的格式如何? ...
- networkx 学习
import networkx as nx import pylab import numpy as np #自定义网络 row=np.array([,,,,,,]) col=np.array([,, ...
- Android Notification setLatestEventInfo方法已废弃
代替setLatestEventInfo的方法是用Notification.Builder创建Builder对象,通过该对象设置Notification相关属性. otification.Builde ...
- System V IPC 之信号量
本文继<System V IPC 之共享内存>之后接着介绍 System V IPC 的信号量编程.在开始正式的内容前让我们先概要的了解一下 Linux 中信号量的分类. 信号量的分类 在 ...
- Python 迭代器之列表解析与生成器
 [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...
- nyoj 公约数和公倍数
公约数和公倍数 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 小明被一个问题给难住了,现在需要你帮帮忙.问题是:给出两个正整数,求出它们的最大公约数和最小公倍数. ...
- Full-Stack-Fundation-Udacity------Lesson 1 Working with CRUD
因为手头在做一个项目,我负责后台,就顺带快进学习Udacity上一个水课(?):Full Stack Foundation.上课的好像是个印度小哥(?),按1.5倍速听讲话还是有点逗的.废话不多说,进 ...
- JavaScript查找数组中最大的值
// 查找一个数组中最大的数 // 定义一个方法 searchMax function searchMax(arr) { // 声明一个变量MaxNumber假设为数组中最大的值arr[0]; var ...