Educational DP Contest U - Grouping 状压dp
传送门
题意:
给你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相关推荐
- [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 ...
- 【LDU】 Week2自测 Disney‘s FastPass | 状压dp、Floyd
这题是hdu 4114... 跟着19的打了打周测,发现个好题 写了写还wa了一发 题目大意: 给出n个点,k个要旅游的景点,然后给出k个景点的信息(位置,t,ft,门票所在地点),t于ft表示,如果 ...
- Educational Codeforces Round 13 E. Another Sith Tournament 状压dp
E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...
- AtCoder Grand Contest 012 E Camel and Oases 状压dp
Description 有一个容量为V的包,n个接水点,坐标分别为x[] 有两种移动方式: 若两个接水点之间的距离不超过此时包的容量v,那么就可以移动 若此时v不等于0,那么可以使v=v/2(下取整) ...
- AtCoder Grand Contest 012 E - Camel and Oases 状压dp
题意 平面上有n个点.初始有V的权值,每次可以从一个点走到与他距离不超过V的点,当V>0时也可以让V/2且到达任意一个点.问从每个点出发能否遍历所有点. n,V<=200000 分析 显然 ...
- CodeForces - 1550E Stringforces(二分+状压dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...
- CH0103最短Hamilton路径 poj2288 Islands and Brigdes【状压DP】
虐狗宝典学习笔记: 取出整数\(n\)在二进制表示下的第\(k\)位 \((n >> ...
- 【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)
题干: 链接:https://ac.nowcoder.com/acm/contest/885/E 来源:牛客网 Note: For C++ languages, the memory limit is ...
- [SGU223]Little Kings(状压DP)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=223 题意:n*n个格子里放k个王(走相邻8个格子),问不互相碰到的放法一共多少个. ...
最新文章
- Adam真的是最好的优化器吗?
- Objective-C中的常量
- Android模仿京东登录注册,Android:布局实例之模仿京东登录界面
- 神策数据荣获 2017 年度商业影响力大数据领域新锐企业 TOP 10
- 美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题
- Strontium-90和Raspberry Pi可以教大学生,Thyrosim可以治疗甲状腺,还有更多新闻
- java算法腐烂橘子,答案——腐烂的橘子算法题目
- 计算机网络—无线局域网
- .net weka ikvm java
- UVa 10286 - Trouble with a Pentagon
- 调研 微信小程序客服功能
- 充分使用腾讯云服务器搭建自己的网站
- 一张表左关联另外两张表,三表关联
- 7、purge_haplogs 基因组去冗余
- MySQL——读写分离 理论+实操!!!
- 测试开发3年,我决定去读个名校硕士
- 类中数组成员变量怎么初始化,数组名与指针的区别
- CF 732F Tourist Reform——v-SCC+dfs
- 新中新DKQ-A16D身份证读卡器C#对接程序出坑记
- 打光在绘画中的重要性有多重要?
热门文章
- 原来医生的处方不是随便乱写的...
- 老是担心数学学不好?这些基础是时候正视了!
- 我们计划招收300名学员,免费攻读人工智能专业
- 插入始终是1_插入式电磁流量计特点与应用
- 前目的地罗伯森是谁_距离目的地只剩10公里,开车师傅却在高速公路上睡着了...
- 支付宝 统一支付 php,支付宝APP支付 统一下单 php服务端 tp5
- java get请求简洁,java 实现 HTTP请求(GET、POST)的方法
- python拼图游戏_乐趣无穷的Python课堂
- 内存和显存_【硬件资讯】显存再升级?Nvidia新卡实锤GDDR6X!显存大升级能否带来性能提升??...
- docker 安装kafka_laradock 中如何安装 Laravel Dusk