题意
给你n道题,在你做第ii{i}道题的时候有p[j]p[j]{p[j]}个前置条件,当这些前置条件都满足的时候,我们可以得到a[j]∗t+b[j]a[j]∗t+b[j]a[j] * t + b[j]的价值,ttt,表示的是你现在已经做了几道题,问你怎样规划可以得到的权值最大。
思路
状压dp" role="presentation" style="position: relative;">dpdpdp,dp[state]dp[state]dp[state]表示的是当前状态下,可以得到的最大权值,那么对于一个状态,他在做第j道题的时候当他满足他的所有前置条件的时候,那么他肯定是由第jjj位是0的状态加上完成这道题所获得的权值转移过来的,至于他当前做了几道题这个问题,我们可以预处理出每种状态下1" role="presentation" style="position: relative;">111的个数,有多少个11<script type="math/tex" id="MathJax-Element-137">1</script>就表明他做了几道题。
代码

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define int long long
using namespace std;
int a[22] , b[22] , z[22];
int num[1<<22] , dp[1<<22];
void init()
{memset(num,0,sizeof(num));for(int i = 1 ; i <= (1<<22) ; i++) num[i] = 1 + num[i&(i-1)]; // 预处理出所有状态中1的数量
}
signed main()
{int n , c;init();scanf("%lld",&n);for(int i = 0 ; i < n ; i++){scanf("%lld%lld%lld",&a[i],&b[i],&c);int state = 0 , t;for(int j = 0 ; j < c ; j++){scanf("%lld",&t);state = state | (1<<(t-1));}z[i] = state; // z[i]表示的是做第i道题的前置条件}memset(dp,-INF,sizeof(dp));dp[0] = 0;int ans = 0;for(int state = 0 ; state < (1<<n)  ; state++){if(dp[state] == -INF) continue;ans = max(ans,dp[state]);for(int j = 0 ; j < n ;j++){if(state & (1<<j)) continue;if((state & z[j]) != z[j]) continue; //当他的所有前置条件都满足的情况下dp[state|(1<<j)] = max(dp[state|(1<<j)] , dp[state] + (num[state]+1)*a[j] + b[j]); }}cout<<ans<<endl;
}

ACM-ICPC 2018 南京赛区网络预赛 J AC Challenge (状压dp)相关推荐

  1. ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge 状压DP

    题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest with n (0 < n \le 20)n(0& ...

  2. ACM-ICPC 2018 南京赛区网络预赛 E. AC Challenge 状压dp

    Dlsj is competing in a contest with n(0<n≤20)n (0 < n \le 20)n(0<n≤20) problems. And he kno ...

  3. ACM-ICPC 2018 南京赛区网络预赛 E.AC Challenge 状压dp

    题意: 给定n个作业,每个作业有两个值a,b, 第i天完成这个作业会得到value :i*a + b: 但是完成这个任务之前需要完成一些别的任务 思路: 乍一看像是搜索,但是似乎不太行(好像可以写过) ...

  4. ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge(状压dp)

    Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he knows the answe ...

  5. ACM-ICPC 2018 南京赛区网络预赛 E. AC Challenge

    题解 题目大意 给你n个问题 要求每分钟解决一个问题 且不能中断 如果中断当前得分为最终得分 每个问题的得分为 解决时间*a[i] + b[i] 有的问题需要先完成某些问题才能做 使用状压DP 用二进 ...

  6. ACM-ICPC 2018 南京赛区网络预赛 E. AC Challenge(状压dp)

    题目链接:https://nanti.jisuanke.com/t/30994 样例输入1 5 5 6 0 4 5 1 1 3 4 1 2 2 3 1 3 1 2 1 4 样例输出1 55 样例输入2 ...

  7. ACM-ICPC 2018 南京赛区网络预赛丨AC Challenge丨状压DP

    题意: 一个人做n道题目,每道题会收获ai*t+bi的分数,同时要休息一个单位的时间t.此外,还限制做题目i之前,要先完成si道题目{pi1,pi2,···,pisi}求最多获得多少分数. 思路: n ...

  8. ACM-ICPC 2018 南京赛区网络预赛 E AC Challenge

    题目链接:https://nanti.jisuanke.com/t/30994 题意:有n道题,做第i道题首先得做Si道题(p1​,p2​,...,psi​​),做一道题需要一分钟,在t时刻完成第i道 ...

  9. ACM-ICPC 2018 南京赛区网络预赛 J Sum(欧拉线性筛+思维)

    Sum 问题分析 题意:我们将类似于6=2⋅36=2⋅36 = 2\cdot 3这样的数称为asquare−freeintegerasquare−freeintegera\:square-free\: ...

最新文章

  1. 沉甸甸的证书,沉甸甸的心情
  2. 《为什么我们的决策总出错》摘录
  3. 在wp7中读取XML的配置文件,Content与Resource的区别
  4. 补习系列(4)-springboot 参数校验详解
  5. ado mysql 读写_C#使用Ado.Net读写数据库
  6. Winform 下拉框绑定问题
  7. 算法:Validate Binary Search Tree(验证二叉查找树)
  8. c语言的指针思维导图,指针基础知识(含思维导图)
  9. Linux命令行大全
  10. STM32入门——什么是STM32
  11. 一文读懂《“十四五”软件和信息技术服务业发展规划》
  12. matlab平稳性检验实例
  13. php 上传图片后反转,PHP想象将图像从CMYK转换为RGB反转图像
  14. 语音识别入门(改变音频采样率)
  15. 想自己做个网站,常用的自助建站哪个好呢?需要注意什么
  16. 招聘:赴微软工作SharePoint技术专家(V-,北京)
  17. 高通平台开发系列讲解(AtCoP篇)AtCoP架构简介
  18. 通过百度地图实现定位并获取本地当日天气信息
  19. 1688API接口seller_info - 获得店铺详情
  20. 初学Pybugthon头秃笔记(三)

热门文章

  1. linux删除eth2设备_如何添加删除子网卡eth0:1(linux案例)
  2. 一站到底题库 mysql_MySQL 8 OCP(1Z0-908)认证考试题库原题(第12题)
  3. 基于易灵思开发板RiscV的调试流程
  4. 未来计算机会取代人类吗,科普:未来人工智能真能取代人类?
  5. Web应用Word编辑
  6. JDK 11 API中文帮助文档.CHM文档无法打开问题
  7. 测试学习-119-使用Excel做好看的报告图
  8. 对TCG的概要分析和对TPM的学习-可信根说明以及RTM(二)
  9. DPDK mbuf引用计数出错的分析
  10. 联发科射频工程师题目_联发科笔试题及部分答案