【题解】HNOI2017大佬】的更多相关文章

传送门 注意到题面里n很小,有\(n\leq100\) 考虑联系n的实际意义 n是你在大佬手中能活的天数 题面颇富深意 好了不闹了 n很小,对于\(40\%\)的数据,爆搜即可 考场上靠这个骗了40pts 对于满分做法 我是考完看了题解才开始写的 然而题解貌似写麻烦了 首先对大佬的伤害与特定日期无关,只与分配给蓄力/伤害的天数有关 所以先dp一下在保证不死的前提下最多能留出多少天输出 我们需要知道能否打出一个特定伤害 所以尝试爆搜一下,得到花费\(d\)时间可以打出的伤害\(f\) 回看题面,题…
哎……做了几个小时最后还是没能想到怼大佬的合法性到底怎么搞.写暴力爆搜感觉复杂度爆炸就没敢写 bfs / dfs 一类,后来发现在种种的约束条件下(远小于所给的 \(n, m\))复杂度完全是可以承受的.不过就算想到了这一步谅我也想不出用单调栈来搞两次的组合吧. 这题最开始就应该发现:扣血和回血完全是可以分开的两个操作.为什么这个点很容易发现呢:1.扣血的多少与时间是无关的.2.本题要求活着(血量 >= 0)而非最大化血量.所以第一步显然应当 dp 出在保证活着的前提下最多能够空出多少天来对付…
题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语. 你作为一个 OIER,面对这样的事情非常不开心,于是发表了对大佬不敬的言论. 大佬便对你开始了报复,你也不示弱,扬言要打倒大佬. 现在给你讲解一下什么是大佬,大佬除了是神犇以外,还有着强大的自信心,自信程度可以被量化为一个正整数 C( 1<=C<=10^8), 想要打倒一个大佬的唯一方法是摧毁 Ta 的自信心,也就是让大佬的自信值等于 0(恰好等…
题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语. 你作为一个 OIER,面对这样的事情非常不开心,于是发表了对大佬不敬的言论. 大佬便对你开始了报复,你也不示弱,扬言要打倒大佬. 现在给你讲解一下什么是大佬,大佬除了是神犇以外,还有着强大的自信心,自信程度可以被量化为一个正整数 C( 1<=C<=10^8), 想要打倒一个大佬的唯一方法是摧毁 Ta 的自信心,也就是让大佬的自信值等于 0(恰好等…
参考题解 \(\text{Solution}\) 我们发现5个行为中2操作与其它操作无关,所以我们采用贪心,尽量让多的时间去攻击大佬. 设 \(f[i][j]\) 表示前 \(i\) 天剩 \(j\) 血量所能攻击的最多次数,是个很简单的 \(dp\) ,决策就是刷不刷水题, ​\(D​\) 就是最多的时间. void DP() { memset(f, -1, sizeof f); f[0][MC] = 0; for (int i = 0; i < n; ++ i) for (int j = 0…
Description 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语.你作为一个OIER,面对这样的事情非常不开心,于是发表了对大佬不敬的言论.大佬便对你开始了报复,你也不示弱,扬言要打倒大佬.现在给你讲解一下什么是大佬,大佬除了是神犇以外,还有着强大的自信心,自信程度可以被量化为一个正整数 C(1<=C<=10^8),想要打倒一个大佬的唯一方法是摧毁 Ta的自信心,也就是让大佬的自信值等于 0(恰好等…
来自FallDream的博客,未经允许,请勿转载,谢谢. 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语. 你作为一个 OIER,面对这样的事情非常不开心,于是发表了对大佬不敬的言论. 大佬便对你开始了报复,你也不示弱,扬言要打倒大佬. 现在给你讲解一下什么是大佬,大佬除了是神犇以外,还有着强大的自信心,自信程度可以被量化为一个正整数 C( 1<=C<=10^8), 想要打倒一个大佬的唯一方法是摧毁 Ta…
Description: 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语. 你作为一个 OIER,面对这样的事情非常不开心,于是发表了对大佬不敬的言论. 大佬便对你开始了报复,你也不示弱,扬言要打倒大佬. 现在给你讲解一下什么是大佬,大佬除了是神犇以外,还有着强大的自信心,自信程度可以被量化为一个正整数 C( 1<=C<=10^8), 想要打倒一个大佬的唯一方法是摧毁 Ta 的自信心,也就是让大佬的自信值…
注意到怼大佬的操作至多只能进行两次.我们逐步简化问题. 首先令f[i][j]表示第i天结束后自信值为j时至多有多少天可以进行非防御操作(即恢复自信值之外的操作).这个dp非常显然.由于最终只需要保证存活,那么取f中的最大值即可(可以在第n天之前使大佬自信值为0而结束),之后就不用再管自己的自信值.复杂度是O(n·mc),数据范围远远没有开满,可能是怕提示做法吧. 现在知道了有多少天可以用来攻击(当然可以有些天划水).对于攻击操作,哪一天进行是没有区别的.那么先不考虑还嘴操作. 只剩下怼大佬的操作…
贼难的一道题 虽然算法都不难,但组合起来就是想不到 首先,最简单的一步,对所有大佬,嘲讽你减的自信值和你做水题回复自信值都是不变的,写个\(dp\),设\(dp[i][j]\)表示第\(i\)天自信值为\(j\)可以有多少天不刷题,这便是你最多可以用的天数 现在你的任务便是在这么多天怼死大佬 考虑到与大佬对怼最多两次,剩下的天数就还嘴,\(bfs\)暴力搜索出所有你可以造成的伤害和所花的时间,自己写\(Hash\)判重,去重后的方案不会很多 现在处理每个大佬看能不能恰好怼死他 把所有搜索出的方案…