题意

给出一张图,有若干点之间连边,边权∈{0,1}\in\{0,1\}∈{0,1},对于点1,与它直接连边的点且边权为0,就是盟友,否则是情敌;间接连边,就要按某种顺序同时列出它们的熟人,如果关系相同,那么这两个人就是盟友,否则是情敌。求点1最多的盟友。

思路

把直接与点1连边的点成为A类点,间接的称为B类点。

70分做法,状态压缩A点选哪些,更新答案。

100分做法,取A,B类点状态小的进行状压dp。

思路

#include <cstdio>
#include <cstring>
#include <algorithm>
#define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)int n, m, aCnt, bCnt, ans;
int f[1 << 23], id[43];
long long con[43], dev[43], v[43][43];int main() {scanf("%d %d", &n, &m);memset(v, -1, sizeof(v));for (int i = 1, x, y, op; i <= m; i++) {scanf("%d %d %d", &x, &y, &op);v[x][y] = v[y][x] = op;}for (int i = 2; i <= n; i++) {if (v[1][i] == -1) continue;id[i] = ++aCnt;ans += v[1][i] ^ 1;for (int j = 2; j <= n; j++)if (v[1][j] == -1 && v[i][j] != -1) {if (!id[j]) id[j] = ++bCnt;con[id[i] - 1] |= 1 << id[j] - 1;dev[id[i] - 1] |= (v[1][i] ^ v[i][j] ^ 1) << id[j] - 1;}}if (aCnt < bCnt) {int S = 1 << aCnt;memset(f, 0xcf, sizeof(f));f[0] = 0;for (int i = 0; i < S; i++) {if (f[i] < 0) continue;int k = 0;for (int j = 0; j < aCnt; j++)if (i & (1 << j)) k |= con[j];for (int j = 0; j < aCnt; j++)if (!(i & (1 << j)))f[i | (1 << j)] = std::max(f[i | (1 << j)], f[i] + __builtin_popcountll(dev[j] & (~k)));}printf("%d", ans + f[S - 1]);} else {int S = 1 << bCnt;memset(f, 0xcf, sizeof(f));f[0] = 0;for (int i = 0; i < S; i++) {if (f[i] < 0) continue;int k = 0;for (int j = 0; j < aCnt; j++)if ((i | con[j]) != i)f[i | con[j]] = std::max(f[i | con[j]], f[i] + __builtin_popcountll(dev[j] & (~i)));}printf("%d", ans + f[S - 1]);}
}

【动态规划 状压dp】JZOJ_6316 djq的朋友圈相关推荐

  1. 动态规划 —— 状压 DP

    [概述] 通常将以一个集合内的元素信息作为状态且状态总数为指数级别的动态规划称为状态压缩动态规划. 其是一类以集合信息为状态的特殊的动态规划问题,主要有传统集合动态规划与基于连通性状态压缩的动态规划两 ...

  2. JZOJ 6316. djq的朋友圈(状压DP)

    JZOJ 6316. djq的朋友圈 题目 Description Input Output 一个整数表示最多的盟友数. Sample Input Sample 1: 7 8 1 2 0 1 3 0 ...

  3. 【动态规划】状压dp:蓝桥2020补给(旅行商问题)

    问题可以转换为: 从0出发途径每个城市至少一次返回0求最短路径: 解法:动态规划(状压dp)+Floyd预处理最短路径(从一个城市到另一个城市走最短路即可,不需考虑途径什么城市) [动态规划笔记]状压 ...

  4. 牛客题单_动态规划课程状压dp习题

    牛客题单_动态规划课程状压dp习题 文章目录 牛客题单_动态规划课程状压dp习题 NC14732 锁 NC15034 德玛西亚万岁 NC16418 宝藏 NC17061 多彩的树 NC17890 方格 ...

  5. [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)

    题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...

  6. 【Gym - 101915D】Largest Group(二分图最大团,状压dp)

    题干: 大黑山上有小小民和小小涛两种物种,山东人小李想要研究这两种物种的关系 奇怪的是大黑山上有相同数量的小小民和小小涛.小李数了数一共有 P 个,小李分别给P个小小民和小小涛编号 1 - P 号,已 ...

  7. [转]状态压缩dp(状压dp)

    状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...

  8. POJ3254 状压DP模板

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6321   Accepted: 3361 Descr ...

  9. 百练4124:海贼王之伟大航路(状压DP)

    题目来源:http://bailian.openjudge.cn/practice/4124/ 4124:海贼王之伟大航路 总时间限制: 1000ms  内存限制: 65536kB 描述 " ...

最新文章

  1. PyTorch中nn.Module类简介
  2. spring配置文件详解【总结】
  3. 双一流高校出新规:研究生未经导师同意发论文,不得用于毕业、评奖!
  4. C++编译 C # 调用方法
  5. “兴趣社区2.0”俘获年轻人
  6. ARM中断分析之四:WinCE的OAL层的中断分析
  7. [AHOI2004]数字迷阵 结论+矩乘
  8. sqlserver操作符篇 优化
  9. JavaScript之数组学习
  10. 电视无线dns服务器,电信电视dns遭到劫持,无线网络DNS被劫持了,怎么解决
  11. 关于premiere中遮罩的几点总结 数媒0802 宋志超
  12. 汪涵曾因太穷被前妻离婚,杨乐乐因一个动作就把初恋男友甩了
  13. 微信小程序云函数处理客服消息
  14. Java后台文件批量压缩下载
  15. jtable如何从表格中定位_ja中怎样将一个JTable表中的指定行添加到数据库
  16. Navicat导出MySQL数据表表结构
  17. 计算机通信与信息系统教学,通信与信息系统学科学术型硕士研究生培养方案
  18. 该内存不能为written修复
  19. ActiveX控件开发(转)
  20. python 之 怎么卸载

热门文章

  1. 资深建模师都说好用的8款建模软件
  2. 性能测评:阿里云服务器ECS通用型g8i实例CPU内存安全存储
  3. MySQL—InnoDB数据页结构
  4. antdv中时间选择器a-range-picker中英文混杂
  5. xshell连不上ftp的解决方法
  6. 锐捷交换机SNMP配置
  7. 2021年安全员-B证(山东省-2020版)考试内容及安全员-B证(山东省-2020版)证考试
  8. 【51毕业设计案例】【006】波形发生器(正弦波、矩形波、三角波、锯齿波)-基于51单片机
  9. 【渝粤题库】国家开放大学2021春2505学前儿童社会教育题目
  10. 数据结构:大整数加法