博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【状压dp】AC Challenge
阅读量:6977 次
发布时间:2019-06-27

本文共 1111 字,大约阅读时间需要 3 分钟。

把每道题的前置条件用二进制压缩,然后dp枚举所有可能状态,再枚举该状态是从哪一个节点转移来的,符合前置条件则更新。

代码:

#include 
#include
#include
using namespace std;typedef long long ll;const int maxn = 1 << 20;ll dp[maxn], a[21], b[21];int pre[21];int calc(int s) { int res = 0; for (int i = 0; i < 20; i++) { if ((1 << i) & s) { res++; } } return res;}int main() { int n; memset(dp, -0x3f, sizeof dp); scanf("%d", &n); for (int i = 1, t, x; i <= n; i++) { scanf("%lld%lld%d", &a[i], &b[i], &t); while (t--) { scanf("%d", &x); pre[i] += (1 << (x - 1)); } } ll ans = 0; dp[0] = 0; for (int i = 1; i < (1 << n); i++) { for (int j = 0; j < n; j++) { if (i & (1 << j)) { int t = i - (1 << j); if ((t & pre[j + 1]) == pre[j + 1]) { dp[i] = max(dp[i], dp[t] + calc(i) * a[j + 1] + b[j + 1]); ans = max(ans, dp[i]); } } } } printf("%lld\n", ans);}

转载于:https://www.cnblogs.com/stolf/p/9572209.html

你可能感兴趣的文章
百度地图 ip查询 service
查看>>
MySQL5.6.16二进制源码安装详解及一键安装实现
查看>>
ARP(Accounting Resource Planning)项目感想
查看>>
Linux系统基础-管理之用户、权限管理
查看>>
20170507Linux七周二次课 io监控free ps 网络状态 抓包
查看>>
CentOS6.3编译安装Nginx1.4.7 + MySQL5.5.25a + PHP5.3.28
查看>>
PHP下载/采集远程图片到本地
查看>>
关于PHP程序员技术职业生涯规划
查看>>
python requests返回的json对象用json.loads()时转为字典时编码变为了unicode
查看>>
各大浏览器 CSS3 和 HTML5 兼容速查表
查看>>
使用可信证书为windows RDP服务提供加密
查看>>
报错 org.springframework.beans.factory.BeanCreationException
查看>>
IOS分享扩展使用JS脚本
查看>>
Hibernate 的 session.load()使用方法
查看>>
$httpprovider指令中拦截器interceptors的使用介绍
查看>>
gulp插件之browser-sync安装报错
查看>>
mongodb 连接和备份
查看>>
Velocity文档(3)
查看>>
SQL中的case when then else end用法
查看>>
通过data:image/png;base64把图片直接写在src里
查看>>