传送门

题意:

给你nnn个物品,让你将其分成任意组,在同一个组内的i,ji,ji,j会获得ai,ja_{i,j}ai,j​的收益,让你选择一种分组方案使得收益最大。

1≤n≤16,∣ai,j∣≤1e91\le n\le 16,|a_{i,j}|\le 1e91≤n≤16,∣ai,j​∣≤1e9

思路:

考虑到nnn很小,所以考虑状压dpdpdp,设dp[i]dp[i]dp[i]代表选的数状态为iii的时候的最大收益,那么下面的问题就是如何合并转移了。。

我们利用像区间dpdpdp一样的思路枚举断点,这里是枚举当前状态statestatestate的子集,设枚举的子集是iii,那么state−istate-istate−i就是另一个子集,我们只要保证算statestatestate的时候其子集的最优解已经被求出来即可,转移就是f[state]=max(f[state],f[i]+f[state−i])f[state]=max(f[state],f[i]+f[state-i])f[state]=max(f[state],f[i]+f[state−i])。

复杂度O(n22n+3n)O(n^22^n+3^n)O(n22n+3n),因为枚举子集的总复杂度是3n3^n3n。

#include<bits/stdc++.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define Mid (tr[u].l+tr[u].r>>1)
#define pb push_back
using namespace std;const int N=20,INF=0x3f3f3f3f,mod=1e9+7;
typedef long long LL;int n;
int a[N][N];
LL dp[1<<N],val[1<<N];void solve() {cin>>n;for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {cin>>a[i][j];}}for(int state=1;state<1<<n;state++) {for(int i=0;i<n;i++) {for(int j=i+1;j<n;j++) if((state>>i&1)&&(state>>j&1)) {val[state]+=a[i][j];}}}for(int state=1;state<1<<n;state++) {dp[state]=val[state];for(int j=state&(state-1);j;j=(j-1)&state) {dp[state]=max(dp[state],dp[state^j]+dp[j]);}}cout<<dp[(1<<n)-1]<<endl;
}int main() {int _=1;while(_--) {solve();}}

Educational DP Contest U - Grouping 状压dp相关推荐

  1. [2021-09-02 contest]CF1251C,可达性统计(bitset优化dp),Boomerang Tournament(状压dp),小蓝的好友(mrx)(treap平衡树)

    文章目录 CF1251C Minimize The Integer acwing164:可达性统计 Facebook Hacker Cup 2016 Round 1 Boomerang Tournam ...

  2. 【LDU】 Week2自测 Disney‘s FastPass | 状压dp、Floyd

    这题是hdu 4114... 跟着19的打了打周测,发现个好题 写了写还wa了一发 题目大意: 给出n个点,k个要旅游的景点,然后给出k个景点的信息(位置,t,ft,门票所在地点),t于ft表示,如果 ...

  3. Educational Codeforces Round 13 E. Another Sith Tournament 状压dp

    E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...

  4. AtCoder Grand Contest 012 E Camel and Oases 状压dp

    Description 有一个容量为V的包,n个接水点,坐标分别为x[] 有两种移动方式: 若两个接水点之间的距离不超过此时包的容量v,那么就可以移动 若此时v不等于0,那么可以使v=v/2(下取整) ...

  5. AtCoder Grand Contest 012 E - Camel and Oases 状压dp

    题意 平面上有n个点.初始有V的权值,每次可以从一个点走到与他距离不超过V的点,当V>0时也可以让V/2且到达任意一个点.问从每个点出发能否遍历所有点. n,V<=200000 分析 显然 ...

  6. CodeForces - 1550E Stringforces(二分+状压dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...

  7. CH0103最短Hamilton路径 poj2288 Islands and Brigdes【状压DP】

    虐狗宝典学习笔记: 取出整数\(n\)在二进制表示下的第\(k\)位                                                    \((n >> ...

  8. 【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)

    题干: 链接:https://ac.nowcoder.com/acm/contest/885/E 来源:牛客网 Note: For C++ languages, the memory limit is ...

  9. [SGU223]Little Kings(状压DP)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=223 题意:n*n个格子里放k个王(走相邻8个格子),问不互相碰到的放法一共多少个. ...

最新文章

  1. Adam真的是最好的优化器吗?
  2. Objective-C中的常量
  3. Android模仿京东登录注册,Android:布局实例之模仿京东登录界面
  4. 神策数据荣获 2017 年度商业影响力大数据领域新锐企业 TOP 10
  5. 美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题
  6. Strontium-90和Raspberry Pi可以教大学生,Thyrosim可以治疗甲状腺,还有更多新闻
  7. java算法腐烂橘子,答案——腐烂的橘子算法题目
  8. 计算机网络—无线局域网
  9. .net weka ikvm java
  10. UVa 10286 - Trouble with a Pentagon
  11. 调研 微信小程序客服功能
  12. 充分使用腾讯云服务器搭建自己的网站
  13. 一张表左关联另外两张表,三表关联
  14. 7、purge_haplogs 基因组去冗余
  15. MySQL——读写分离 理论+实操!!!
  16. 测试开发3年,我决定去读个名校硕士
  17. 类中数组成员变量怎么初始化,数组名与指针的区别
  18. CF 732F Tourist Reform——v-SCC+dfs
  19. 新中新DKQ-A16D身份证读卡器C#对接程序出坑记
  20. 打光在绘画中的重要性有多重要?

热门文章

  1. 原来医生的处方不是随便乱写的...
  2. 老是担心数学学不好?这些基础是时候正视了!
  3. 我们计划招收300名学员,免费攻读人工智能专业
  4. 插入始终是1_插入式电磁流量计特点与应用
  5. 前目的地罗伯森是谁_距离目的地只剩10公里,开车师傅却在高速公路上睡着了...
  6. 支付宝 统一支付 php,支付宝APP支付 统一下单 php服务端 tp5
  7. java get请求简洁,java 实现 HTTP请求(GET、POST)的方法
  8. python拼图游戏_乐趣无穷的Python课堂
  9. 内存和显存_【硬件资讯】显存再升级?Nvidia新卡实锤GDDR6X!显存大升级能否带来性能提升??...
  10. docker 安装kafka_laradock 中如何安装 Laravel Dusk