题意:

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

思路:

n的范围只有20,这就暗示可以状压,(我一开始想到了拓扑排序,然后发现建不了图的),状压以后就可以DP求答案了。用二进制来表示做题的状态,我们举例子:
对于状态:1001101
表示做了题目:1-3-4-7
这可以由以下四种状态转移来(假如没有限制的话):
1001100 + 0000001
1001001 + 0000100
1000101 + 0001000
1001101 + 1000000
以第一个为例,就是从做的3-4-7题目状态的基础上,做了题目1转移来。
于是对于每个状态,我们枚举每一个二进制位,再判断这一位前个状态是否能满足对应题目的条件。转移就是计算权值,求个最大值。至于t的数值是多少,显然就是二进制里1的个数啦!

参考代码:

(细节要注意初始化成负无穷,因为a的值可能是负数,所以存在某些情况,先做一道亏损的题目,后续会使得更多的高分题目可做)

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long ll;
const int N = 21;
ll dp[1<<N],ans;
int a[N],b[N],pre[N];int Count1(int x){int res=0;for(int i=0;i<N;i++)if(x&(1<<i))res++;return res;
}int main(){int n;scanf("%d",&n);for(int i=0,s;i<n;i++){scanf("%d%d%d",a+i,b+i,&s);for(int j=1,p;j<=s;j++){scanf("%d",&p);pre[i]+=1<<(p-1);}}memset(dp,0x80,sizeof dp);//初始化负数极小的简单方法dp[0]=0;int FState=(1<<n)-1;for(int i=1;i<=FState;i++)for(int j=0,u,v;j<n;j++){if(!(i&(1<<j)))//i状态没有做第j题continue;u=i-(1<<j);if((u&pre[j])!=pre[j])//i状态除去j题的状态不满足j题的条件continue;ll w=dp[u]+a[j]*Count1(i)+b[j];ans=max(dp[i]=max(dp[i],w),ans);}printf("%lld\n",ans);return 0;
}
/*
5
5 6 0
4 5 1 1
3 4 1 2
2 3 1 3
1 2 1 4
*/

ACM-ICPC 2018 南京赛区网络预赛丨AC Challenge丨状压DP相关推荐

  1. 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 ...

  2. 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 ...

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

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

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

    题意 给你n道题,在你做第ii{i}道题的时候有p[j]p[j]{p[j]}个前置条件,当这些前置条件都满足的时候,我们可以得到a[j]∗t+b[j]a[j]∗t+b[j]a[j] * t + b[j ...

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

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

  6. 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& ...

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

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

  8. 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 ...

  9. ACM-ICPC 2018 南京赛区网络预赛

    轻轻松松也能拿到区域赛名额,CCPC真的好难 An Olympian Math Problem 问答 只看题面 54.76% 1000ms 65536K Alice, a student of gra ...

  10. ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树

    目录 ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树 题面 题意 思路 ACM-ICPC 2018 南京赛区网络预赛 Lpl and En ...

最新文章

  1. Java、Android静态代理与动态代理
  2. 【转载】使用Nexus搭建Maven服务器详细配置
  3. 【C++】35.判断一个文件是否存在、 查找字符串中的子串
  4. 读DL论文心得之SPP
  5. .NET Framework 类库: Uri类
  6. linux 挂载多余空间,linux 空间不够,磁盘挂载
  7. python 查找算法_七大查找算法(Python)
  8. spring 集成mybatis——多数据源切换(附带定时器的配置)
  9. 3.3、苏宁百万级商品爬取 代码讲解 商品爬取
  10. 【HAVENT原创】NodeJS 短网址开发(调用第三方接口)
  11. matlab实验 信号处理,数字信号处理MATLAB实现与实验
  12. 科研热点|中科院文献情报中心:2022分区表即将发布,这几大变化值得关注~
  13. Daily errors about log encoding and web page garbled characters
  14. Swift --- 扩展(Extention)
  15. 通达信地量指标公式 启涨地量买点选股指标天眼地量指标
  16. python快速入门精讲_Python快速入门精讲
  17. Java数据结构-图
  18. 放纵如山倒,自律如抽丝
  19. [JVM]虚拟机类加载机制
  20. 软件测试 - 缺陷管理篇

热门文章

  1. 镇魔曲手游服务器维护,网易《镇魔曲》手游好玩到紧急追开6台服务器?
  2. jms(jms是什么意思的缩写)
  3. 【STM32H7教程】第51章 STM32H7的LTDC应用之LCD汉字显示和2D图形显示
  4. 强化学习 | 策略梯度 | Natural PG | TRPO | PPO
  5. 89.77%准确率!谷歌大脑提出CoAtNet:结合卷积和注意力
  6. 在网站中插入 英文地图非谷歌
  7. Linux 安装Redis 图解教程
  8. Redis安装Windows教程
  9. 微信小程序的登录过程简介
  10. idea注释设置和注释格式