题目大意:

给定 n m k 为 n种主武器 m种副武器 武器有k种属性

接下来n行 先给定当前主武器的综合分s1 再给定k种属性的值

接下来m行 先给定当前副武器的综合分s2 再给定k种属性的值

要求选定一种主武器配一种副武器 使得 s1+s2+k种属性的差值的绝对值之和

T<=100, n<=100000, m<=100000, K<=5, 0<=S<=1e9, |x[i]|<=1e9, sum of (n+m)<=300000

k的范围只有5 状压枚举每种属性的加减

即 若主武器有三种属性a b c 副武器A B C(设a>A b<B c>C)

那么差值的绝对值就是 a-A + B-b + c-C = a-b+c + (-A+B-C) = 主武器部分 + 副武器部分

1.因为是求差值的绝对值 会发现当主武器某属性是 + 那么副武器对应属性就应该是 -

2.因为实际上所有属性的大小关系未知 所以枚举加减来可找到最大的一种

(01分别对应主武器的加减 则副武器与主武器相反10分别表示加减)

3.因为最后的答案要最大 又答案可被分为主武器和副武器两部分 所以可直接求两部分分别的最大

状压枚举时 找出在当前枚举的加减中 答案最大的主武器 和 答案最大的副武器 然后更新答案就行

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
const int N=1e5+;
const int mod=1e9+; int n,m,k;
LL v1[N][], v2[N][];
LL s1[N], s2[N]; int main()
{
int _; scanf("%d",&_);
while(_--) {
scanf("%d%d%d",&n,&m,&k);
inc(i,,n) {
scanf("%lld",&s1[i]);
inc(j,,k) scanf("%lld",&v1[i][j]);
}
inc(i,,m) {
scanf("%lld",&s2[i]);
inc(j,,k) scanf("%lld",&v2[i][j]);
}
int task=(<<k)-;
LL ans=-INF;
inc(s,,task) {
LL max1=-INF;
inc(i,,n) {
LL tmp1=s1[i];
inc(j,,k)
if((<<j-)&s) tmp1+=v1[i][j];
else tmp1-=v1[i][j];
max1=max(max1,tmp1);
}
LL max2=-INF;
inc(i,,m) {
LL tmp2=s2[i];
inc(j,,k)
if((<<j-)&s) tmp2-=v2[i][j];
else tmp2+=v2[i][j];
max2=max(max2,tmp2);
}
ans=max(ans,max1+max2);
}
printf("%lld\n",ans);
} return ;
}

hdu 6435 /// 状压的更多相关文章

  1. HDU 4778 状压DP

    一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...

  2. HDU 3001 状压DP

    有道状压题用了搜索被队友骂还能不能好好训练了,, hdu 3001 经典的状压dp 大概题意..有n个城市 m个道路  成了一个有向图.n<=10: 然后这个人想去旅行.有个超人开始可以把他扔到 ...

  3. hdu 5094 状压bfs+深坑

    http://acm.hdu.edu.cn/showproblem.php?pid=5094 给出n*m矩阵 给出k个障碍,两坐标之间存在墙或门,门最多10种,状压可搞 给出s个钥匙位置及编号,相应的 ...

  4. hdu 2809(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白. #include<iostream> #in ...

  5. hdu 2167(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...

  6. Engineer Assignment HDU - 6006 状压dp

    http://acm.split.hdu.edu.cn/showproblem.php?pid=6006 比赛的时候写了一个暴力,存暴力,过了,还46ms 那个暴力的思路是,预处理can[i][j]表 ...

  7. hdu 3254 (状压DP) Corn Fields

    poj 3254 n乘m的矩阵,1表示这块区域可以放牛,0,表示不能,而且不能在相邻的(包括上下相邻)两个区域放牛,问有多少种放牛的方法,全部不放也是一种方法. 对于每块可以放牛的区域,有放或者不放两 ...

  8. HDU 5823 (状压dp)

    Problem color II 题目大意 定义一个无向图的价值为给每个节点染色使得每条边连接的两个节点颜色不同的最少颜色数. 对于给定的一张由n个点组成的无向图,求该图的2^n-1张非空子图的价值. ...

  9. hdu 4739 状压DP

    这里有状态压缩DP的好博文 题目:题目比较神,自己看题目吧 分析: 大概有两种思路: 1.dfs,判断正方形的话可以通过枚举对角线,大概每次减少4个三角形,加上一些小剪枝的话可以过. 2.状压DP,先 ...

随机推荐

  1. Money

    /** * www.yiji.com Inc. * Copyright (c) 2012 All Rights Reserved. */package com.yjf.common.lang.util ...

  2. gitlab+gitlab-ci+docker自动化部署

    导言 本次测试用的是gitlab-ci,单纯与gitlab搭配而言,gitlab-ci较jenkins更加一体,顺畅. 主机1:192.168.100.151 gitlab 主机2:192.168.1 ...

  3. linux中常用的命令大全

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  4. Java对象引用四个级别(强、软、弱、虚)

    最近,高级Java技术栈微信群中,有一些猿友在讨论JVM中对象的周期问题,有谈到引用的级别,现在为大家做个总结吧,虽然大多数公司并没有意识或者用到这些引用,但了解这些基本概念对熟悉整个垃圾回收机制和面 ...

  5. python调用tushare港股通每月成交统计

    接口:ggt_monthly 描述:港股通每月成交信息,数据从2014年开始 限量:单次最大1000 积分:用户积5000积分可调取,请自行提高积分,具体请参阅本文最下方积分获取办法 注:tushar ...

  6. CTU OPEN 2017 Ice cream samples /// 尺取法

    题目大意: 给定n k 接下来n行 给定n个摊位的冰淇淋信息 首先给一个t 表示这个摊位有t个冰淇淋 接下来t个数表示对应冰淇淋的品种 走到连续的几个摊位 会买下走过的摊位的所有的冰淇淋 求 要买下所 ...

  7. ArcGis基础——设置图层可选状态

    在ArcMap的图层列表上右键,可以设置“仅本图层可选”. 那么,如何设置回多个或者全部图层可选状态呢? 1.在ArcMap的菜单栏找到 自定义——自定义模式——选择——设置可选图层. 2.将“设置可 ...

  8. Spring学习笔记(9)——注入参数

    集合类型属性 1.Set类型 private Set<String> sets=new HashSet<String>(); //我们需要给它添加set方法 public Se ...

  9. Socket传输中文乱码

    最近在学习Socket的时候,遇到了中文乱码问题,在网上找到了一个说的很透彻的,这里分享一下:http://helloworlda.iteye.com/blog/1270703 现在问题是这样的: 打 ...

  10. Shell内置命令let