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可 ...
随机推荐
- Java 执行Shell脚本指令
一.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本.而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且Runtime.getRu ...
- 机器学习算法(SVM)公开课4月25日开讲
从深蓝到AlphaGo,聪明的人工智能一再“羞辱”人类大脑: 指纹识别.以图搜图.语音助手.无人驾驶···生活里它无孔不入 离不开智能手机的我们,是否已开始被人工智能的“奴役”? 或许,你不需要会运用 ...
- JavaScript日期排序
//日期排序 function sortDownDate(a, b) { return Date.parse(a.received) - Date.parse(b.received); } funct ...
- 什么是DDoS攻击?DDoS防御的11种方针详解
对于遭受DDOS攻击的情况是让人很尴尬的,如果我们有良好的DDoS防御方法,那么很多问题就将迎刃而解,我们来看看我们有哪些常用的有效地方法来做好DDoS防御呢. 对于DDoS防御的理解: 对付DDOS ...
- spring使用BeanPostProcesor实现AOP源码分析
源码 AbstractApplicationContext#public void refresh() throws BeansException, IllegalStateException { f ...
- recovery 差分升级包制作超时
我们在对android系统升级的时候,可以减少升级包的大小,只升级差异部分,也就是差分包升级,相关的描述可以参考:http://blog.csdn.net/csdn66_2016/article/de ...
- JavaScript大杂烩3 - 理解JavaScript对象的封装性
JavaScript是面向对象的 JavaScript是一种基于对象的语言,你遇到的所有东西,包括字符串,数字,数组,函数等等,都是对象. 面向过程还是面向对象? JavaScript同时兼有的面向过 ...
- Excel函数进阶
#笔记:为了方便自己以后查找,以便随时随地能查看.形成系统化学习! 查找引用函数 ------------------包含----------Vlookup函数(if数组).Hlookup函数.loo ...
- 將UNITY作品上傳到Facebook App!
前言 大家好,今天要來介紹如何用UNITY 將製作好的遊戲上傳到Facebook,也就是Facebook App.近期Facebook與Unity合作而推出了新的插件,利用插件可上傳分數.邀請好友.P ...
- 详细理解平衡二叉树AVL与Python实现
前言 上一篇文章讨论的二叉搜索树,其时间复杂度最好的情况下是O(log(n)),但是最坏的情况是O(n),什么时候是O(n)呢? 像这样: 如果先插入10,再插入20,再插入30,再插入40就会成上边 ...