洛咕 P4131 [WC2005]友好的生物


首先可以发现\(C\)是没有用的,可以乘进所有的权值里面做

考虑没有最后一维的限制,那么两个生物的友好值就是

\(\sum_{i=1}^k|a_i-b_i|\)

这个绝对值就很麻烦了。

但是可以换个思路想,既然是绝对值那么一定\(\geq 0\),所以两个生物的友好值是

\(\max\left(\sum_{i=1}^k(a_i-b_i)(-1)^{c_i}\right)\)

其中\(c\)取遍所有的01数组。正确性是显然的,因为其他的都没有答案大。

那么这道题\(k\leq 5\),不考虑最后一维就是\(k=4\)。

上面的式子分开来考虑:

\(\max\left(\sum_{i=1}^ka_i(-1)^{c_i}+\sum_{i=1}^kb_i(-1)^{c_i+1}\right)\)

那么思路就很清晰了,对每个\(c\)记\(\max\left(\sum_{i=1}^kw_i(-1)^{c_i}\right)\)(记为\(Max_c\))以及取这个最大值的生物,

答案就是\(\max_{c_i+d_i=1}(Max_c+Max_d)\)

但是还有最后一维的限制,所以把生物按照最后一维排序,依次先和Max更新答案,再更新Max。在更新\(Max\)的时候减去最后一维更新,更新答案的时候加上最后一维

#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct yyb{int a[4],b,i;}s[100010];
int S[100010][1<<4];
il bool operator<(const yyb&a,const yyb&b){return a.b<b.b;}
int Mx[1<<4],f[1<<4],C[6];
int main(){
int n=gi(),k=gi(),U=(1<<4)-1;
for(int i=0;i<k;++i)C[i]=gi();
for(int i=1;i<=n;++i){
for(int j=0;j<k-1;++j)s[i].a[j]=gi()*C[j];
for(int j=k-1;j<4;++j)s[i].a[j]=0;
s[i].b=gi()*C[k-1];
s[i].i=i;
}
k=4;
std::sort(s+1,s+n+1);
for(int i=1;i<=n;++i)
for(int j=0;j<1<<k;++j)
for(int l=0;l<k;++l)
if((1<<l)&j)S[i][j]+=s[i].a[l];
else S[i][j]-=s[i].a[l];
for(int i=0;i<1<<k;++i)Mx[i]=S[1][i]+s[1].b,f[i]=s[1].i;
int ans=-1e9,a=0,b=0;
#define chkans(t,_a,_b) {if((t)>ans)ans=(t),a=(_a),b=(_b);}
for(int i=2;i<=n;++i){
for(int j=0;j<1<<k;++j)chkans(Mx[U^j]+S[i][j]-s[i].b,s[i].i,f[U^j]);
for(int j=0;j<1<<k;++j)if(Mx[j]<S[i][j]+s[i].b)Mx[j]=S[i][j]+s[i].b,f[j]=s[i].i;
}
printf("%d %d\n%d\n",a,b,ans);
return 0;
}

洛咕 P4131 [WC2005]友好的生物的更多相关文章

  1. [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} ...

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

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

  3. 洛咕3312 [SDOI2014]数表

    洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...

  4. 洛咕 P3700 [CQOI2017]小Q的表格

    洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...

  5. 洛咕 P2336 [SCOI2012]喵星球上的点名

    洛咕 P2336 [SCOI2012]喵星球上的点名 先求出SA和height,一个点名串对应的就是一段区间,还有很多个点,就转化成了 有很多个区间,很多个点集,对每个区间计算和多少个点集有交,对每个 ...

  6. bzoj5068: 友好的生物

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

  7. 洛咕 P4528 [CTSC2008]图腾

    洛咕 P4528 [CTSC2008]图腾 神题orz. 先约定abcd表示\(1\leq A<B<C<D\leq n\),而且\(y_a,y_b,y_c,y_d\)的排名正好是\( ...

  8. 洛咕P3250 [HNOI2016]网络 整体二分

    这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...

  9. 洛咕 P2480 [SDOI2010]古代猪文

    洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...

随机推荐

  1. QuickBI助你成为分析师-数据建模(二)

    摘要: 数据集编辑功能界面介绍以及常见问题总结. 在数据集编辑界面可以进行数据建模来更好的展示数据,创建数据集默认将数值类型字段作为度量,日期.字符串等类型作为维度,度量可以根据维度分组展示.下面来介 ...

  2. Hadoop HBase概念学习系列之列、列簇(十二)

    列在列簇中依照字典排序.例如,列簇是基础信息或公司域名或水果类.列是基础信息:面貌.基础信息:年龄.公司域名:org.公司域名:edu.水果类:苹果.水果类:香蕉.      列 = 列簇:列修饰符 ...

  3. Altium制作DC002的PCB封装和3D模型

    Altium制作DC002的PCB封装和3D模型 常用的电源连接器(Dc Power Jack Connector)DC002.DC005等等型号的3D模型在网上很难找到合适的,我们可以选择CUI 公 ...

  4. Mongodb极简实践

    MongoDB 极简实践入门 1. 为什么用MongoDB? 传统的计算机应用大多使用关系型数据库来存储数据,比如大家可能熟悉的MySql, Sqlite等等,它的特点是数据以表格(table)的形式 ...

  5. apt-spy来获得适合自己的源,适用于UBUNTU/Debian

    使用ubuntu和debian等使用APT源的系统,有些时候是不是会不知道哪里有源,哪里的源比较快让自己的宽带完全利用,我们可以用apt-spy来自动找到 apt-spy -d unstable -a ...

  6. 解决redis-cli command not found问题

    在使用其他服务器连接Redis服务器时,一般使用的语句是 [redis-cli -h IP -p port] 但是早上连接时报错:redis-cli command not found 在redis服 ...

  7. python导入模块总结与分析

    定义1:python中什么是模块? 答:模块就是一个.py文件,每一个以py作为后缀的文件,都是一个模块. 定义2:Python中什么是包? 答:包是一类特殊的模块,他能包含其他模块,为了更好的组织模 ...

  8. Java & Groovy & Scala & Kotlin - 20.Switch 与模式匹配

    Overview 本章主要介绍高级条件语句中的 switch 语句以及其增强版的模式匹配. Java 篇 Switch 特点 Java 中 switch 语句功能类似 if,但是 switch 主要用 ...

  9. eclipse异常关闭,无法启动tomcat解决办法

    如果eclipse异常关闭,会出现以下 此时需要关闭javaw.exe即可,重新启动tomcat了. 关闭javaw.exe需要打开任务关闭器,选择详细信息,然后结束javaw.exe即可

  10. Bottle + WebUploader 修改Bottle框架从而大文件上传实现方案

    Bottle 是个轻量级的Web框架,小巧又强大,真不愧是个轻量级的框架.可扩展性非常好,可以扩展很多功能,但是有些功能就不得不自己动手修改了. Bottle:http://www.bottlepy. ...