题目链接

Boss Rush

题目大意

给了我们一个Boss的血量,然后给了我们nnn个技能,每个技能有施法时间和一个施法过程时间,会造成一个持续性伤害,题目问我们最快什么时候能干掉Boss?

题解

考虑二分答案,然后我们需要进行判定在midmidmid时间时,所能造成的最大伤害是多少,如果大于等于Boss的血量,那么返回true,否则返回false。我们计算最大伤害时,可以考虑使用状压DP,f[i]f[i]f[i]中的iii表示一个状态——哪一位为1就代表使用过哪些技能。具体状态转移可以看代码

代码

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
#define x first
#define y second
#define int long long
#define endl '\n'
const int inf = 1e9 + 10;
const int maxn = 100010, M = 2000010;
const int mod = 1e9 + 7;
typedef pair<int,int> PII;
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
int n, H;
int d[20][maxn], s[20][maxn];
int t[20], len[20];
int f[maxn * 3];
bool check(int mid)
{memset(f, -1, sizeof f);f[0] = 0;for(int i = 0; i < 1 << n; i ++){int time = 0;for(int j = 0; j < n; j ++){if(i >> j & 1) time += t[j];}if(time > mid) continue;for(int j = 0; j < n; j ++){if(i >> j & 1) continue;f[i | 1 << j] = max(f[i | 1 << j], f[i] + s[j][min(len[j], mid - time)]);if(f[i | 1 << j] >= H) return true;}}return false;
}
signed main()
{IOS;int T; cin >> T;while(T --){cin >> n >> H;int l = 0, r = 0;for(int i = 0; i < n; i ++){cin >> t[i] >> len[i];r += max(t[i], len[i]);for(int j = 1; j <= len[i]; j ++) cin >> d[i][j];for(int j = 1; j <= len[i]; j ++) s[i][j] = s[i][j - 1] + d[i][j];}while(l < r){int mid = l + r >> 1;if(check(mid)) r = mid;else l = mid + 1;}if(!check(l)) cout << -1 << endl;else cout << l - 1 << endl;}    return 0;
}

2022杭电多校 第三场 B题 Boss Rush相关推荐

  1. 2022杭电多校第八场题解

    2022杭电多校第八场 Theramore(思维) 题意 给定一个01字符串,每次可以将一个奇数长度的区间翻转,求操作后字典序最小的字符串. 分析 翻转奇数长度的区间,元素位置的奇偶性不变,统计奇数位 ...

  2. 2022杭电多校(三)

    2022杭电多校(三) 文章目录 2022杭电多校(三) 一.比赛小结 二.题目分析及解法(基础题) 1001.Equipment Upgrade 1002.Boss Rush 1003.Cyber ...

  3. 2019.7.29 杭电多校第三场小结

    index > 杭电多校第三场 题号 标题 AC 做法 状态 6603 Azshara's deep sea (51/150)34.00% 6604 Blow up the city (213/ ...

  4. 2021杭电多校第八场补题

    比赛传送门:Contest Problem List (hdu.edu.cn) 1006)GCD Game 题目翻译:爱丽丝和鲍勃正在玩游戏. 他们轮流操作.有n个数字,a1,a2,...,an.每次 ...

  5. 杭电多校第三场-H-Game

    题目描述 Again Alice and Bob is playing a game with stones. There are N piles of stones labelled from 1 ...

  6. 2019杭电多校第三场 6608 Fansblog(威尔逊定理+miller_rabin素性测试)

    Problem Description 传送门 Farmer John keeps a website called 'FansBlog' .Everyday , there are many peo ...

  7. [枚举]Stormwind 2022杭电多校第8场 1011

    Problem Description \space \space  "So, people of Stormwind! Let us unite this day. Let us rene ...

  8. 2022 年杭电多校第八场补题记录

    A Theramore 题意:给定一个长度为 nnn 的 010101 串,每次可以选取一个奇数长度的连续子串进行位置上的翻转,问经过若干次操作能得到的字典序最小的串.n≤5×105n \leq 5\ ...

  9. 2022杭电多校第八场

    文章目录 1001.Theramore 1007.Darnassus 1008.Orgrimmar 1011.Stormwind 1001.Theramore 易知,字符串的奇偶项之间不会互换,只需要 ...

  10. hdu 6656 2019杭电多校第7场 期望题

    设f[i]为从i升级到i+1期望需要的金钱,由于每级都是能倒退或者升级到i+1,所以询问从l,r的期望金钱可以直接前缀和,那么推导每一级升级需要的期望钱也可以用前缀和推导 设sum[i]=f[1]+f ...

最新文章

  1. phpstudy下的mysql升级
  2. php 浅复制 和 深复制(clone)
  3. 常见Java面试题 抽象类能使用 final 修饰吗?
  4. Markdown+Pandoc→HTML幻灯片速成
  5. 代码重新发布后docker服务会不会受影响_分享点经验 | 浅谈微服务架构
  6. 黑马程序员_java基础一
  7. 借助 Lucene.Net 构建站内搜索引擎(下)
  8. 【0709作业】简易的购房商贷月供计算器
  9. 香港服务器防攻击能力怎么样
  10. 高红梅:第三章 第三节 从探寻自我到生命共同体的身份认同
  11. 四大CPU架构的区别
  12. 七千年来被国人误解的七句古话
  13. hadoop Error: JAVA_HOME is incorrectly set.Please update C:\hadoop-3.0.0\etc\hadoop\hadoop-env.cmd
  14. python excel sheet_人生苦短我学Python——Excel处理之快速创建多个Sheet并重命名
  15. 绝地求生——PUBG吃鸡游戏模糊,画质很差
  16. 任务分配到每个工作日
  17. C语言编译器Visual C++(中文版)的安装
  18. 第一期 前言 《路由器就是开发板》
  19. JSONObject转集合List
  20. 简单使用系统的设备实现二维码扫描

热门文章

  1. 终于有人把联邦学习讲明白了
  2. InputBox接收数字,并将该数字转成int型
  3. python实现火车票查询工具_用 Python 写一个命令行火车票查看器
  4. lightoj1234——调和级数+欧拉常数
  5. 意创坊-移动富媒体平台
  6. 标准化、归一化等的适用范围
  7. 深度分析|2017阿里双十一1682亿背后的营销隐秘
  8. python 分析泰坦尼克号生还率_泰坦尼克号上谁的生存几率更大?Kaggle 金牌得主 Python 数据挖掘框架发现真相...
  9. cocoa touch
  10. 真人qq秀代码_关于QQ我的记忆