Luogu4131 WC2005 友好的生物 状压DP
首先$C_i$是没有意义的,因为可以直接让$d_i \times= C_i$,答案也是一样的
所以我们现在考虑求$(\sum_{i=1}^{K-1} |d_{p,i}-d_{q,i}|) - |d_{p,K} - d_{q,K}|$的最大值
这个绝对值好烦人啊qaq
我们考虑如何消去这个绝对值
先抛开第$K$项,假设我们要计算$\sum_{i=1}^{K-1} |d_{p,i}-d_{q,i}|$的最大值
可以发现$\sum_{i=1}^{K-1} |d_{p,i}-d_{q,i}| = max(\sum_{i=1}^{K-1} (d_{p,i}-d_{q,i}) \times (-1)^{a_i})=max(\sum_{i=1}^{K-1} d_{p,i} \times (-1)^{a_i} + d_{q,i} \times (-1)^{a_i + 1})$
其中$0 \leq a_i \leq 1$且取遍所有情况
那么我们可以设$dp_j$表示$a_i$状压成二进制表示为$j$时的$\sum_{i=1}^{K-1} d_{p,i} \times (-1)^{a_i}$的最大值,$ind_j$表示$dp_j$取到最大值时的$p$值,转移也比较方便了。
最后我们考虑第$K$维的影响,我们不妨按照第$K$维从小到大排序,那么$dp_j$表示$a_i$状压成二进制表示为$j$时的$\sum_{i=1}^{K-1} d_{p,i} \times (-1)^{a_i} + d_{K,i}$的最大值,最后统计答案时再减去当前的$d_K$值就可以了
#include<bits/stdc++.h>
//This code is written by Itst
using namespace std;
inline int read(){
;
char c = getchar();
;
while(!isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
;
] , dir[] , C[];
int N , K , ans , ind1 , ind2;
struct ani{
] , ind;
bool operator <(const ani a)const{
] < a.val[K - ];
}
}now[MAXN];
inline int calc(int d , int type){
;
; i < K - ; ++i)
sum += (type & ( << i) ? : -) * now[d].val[i];
return sum;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in" , "r" , stdin);
//freopen("out" , "w" , stdout);
#endif
N = read();
K = read();
; i < K ; ++i)
C[i] = read();
; i <= N ; ++i){
; j < K ; ++j)
now[i].val[j] = read() * C[j];
now[i].ind = i;
}
sort(now + , now + N + );
; i < << (K - ) ; ++i){
dir[i] = now[].ind;
dp[i] = calc( , i) + now[].val[K - ];
}
; i <= N ; ++i){
; j < << (K - ) ; ++j){
<< (K - )) - - j;
] > ans){
ans = t + dp[d] - now[i].val[K - ];
ind1 = now[i].ind;
ind2 = dir[d];
}
}
; j < << (K - ) ; ++j)
]){
dp[j] = calc(i , j) + now[i].val[K - ];
dir[j] = now[i].ind;
}
}
cout << ind1 << ' ' << ind2 << endl << ans;
;
}
Luogu4131 WC2005 友好的生物 状压DP的更多相关文章
- BZOJ5068: 友好的生物(状压 贪心)
题意 题目链接 Sol 又是一道神仙题??.. 把绝对值拆开之后状压前面的符号?.. 下界显然,但是上界为啥是对的呀qwq.. #include<bits/stdc++.h> using ...
- 公牛与状压dp
T1 疾病管理 裸得不能再裸的状压dp 不过数据范围骗人 考试时k==0的点没过 我也很无奈呀qwq #include<iostream> #include<cstdio> # ...
- 洛谷U14667 肝活动【比赛】 【状压dp】
题目描述 Yume 最近在玩一个名为<LoveLive! School idol festival>的音乐游戏.他之所以喜欢上这个游戏,是因为这个游戏对非洲人十分友好,即便你脸黑到抽不出好 ...
- 洛谷P3694 邦邦的大合唱站队【状压dp】
状压dp 应用思想,找准状态,多考虑状态和\(f\)答案数组的维数(这个题主要就是找出来状态如何转移) 题目背景 \(BanG Dream!\)里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. ...
- 状压dp大总结1 [洛谷]
前言 状态压缩是一种\(dp\)里的暴力,但是非常优秀,状态的转移,方程的转移和定义都是状压\(dp\)的难点,本人在次总结状压dp的几个题型和例题,便于自己以后理解分析状态和定义方式 状态压缩动态规 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
随机推荐
- python之黏包和黏包解决方案
黏包现象主要发生在TCP连接, 基于TCP的套接字客户端往服务端上传文件,发送时文件内容是按照一段一段的字节流发送的,在接收方看来,根本不知道该文件的字节流从何处开始,在何处结束. 两种黏包现象: 1 ...
- MVC与单元测试实践之健身网站(七)-添加计划
计划的制定涉及到周期-动作包-动作的关联操作,在上一篇<计划的添加与重置>完成了周期的设置.动作包的添加,现在要完成的是动作的添加操作. 一 具体功能 a) 在选定了一个大周期具有的天数 ...
- 浅谈C#依赖注入
什么是依赖注入?不管是js中的一些前端框架还是,java,C#,php等中的一些后端开发框架中,都会涉及这个看着逼格略高的词语:依赖注入,越是看着好像很厉害的东西越是会让许多人学习产生恐惧,好像很厉害 ...
- 面向对象的封装与隐藏 this
当我们创建一个对象的时候,我们可以通过‘对象.属性’的方式,对对象的属性进行赋值. 这里赋值操作要受到属性的数据类型和存储范围的制约,但是除此之外,没有其他制约条件. 但是实际问题中我们需要给这个属性 ...
- SQL SERVER2008判断文件夹是否存在并创建文件夹
原文地址:https://www.cnblogs.com/iiwen/p/7650118.html DECLARE @PATH VARCHAR(255) --路径 DECLARE @DATE VARC ...
- SQL 三范式
第一范式:无重复的列,一列只能包含一个字段 第二范式:主键约束,一行只能被唯一标识 第三范式:非主键字段要严格依赖于主键字段
- Windows结构化异常处理浅析
近期一直被一个问题所困扰,就是写出来的程序老是出现无故崩溃,有的地方自己知道可能有问题,但是有的地方又根本没办法知道有什么问题.更苦逼的事情是,我们的程序是需要7x24服务客户,虽然不需要实时精准零差 ...
- kettle用mysql创建资源库执行sql代码报错
一.原因: sql语句里边使用 'Y' 'N' 给boolean类型的赋值产生sql失败 二.解决方法:将insert语句中‘Y’或‘N’ 改成TRUE或FALSE即可,共两张表3个地方 ...
- domain or business logic
Here are a few of the questions you should ask when writing business logic: ¡Do you fully understand ...
- linux运行apache出现403错误
1.文档权限问题,这是linux操作系统下经常会遇到的问题,需要使用chmod的指令把网站所在目录的权限提升到755.2.SElinux,开启它也会导致403错误的产生. 查看SELinux状态:1. ...