- 首页 > it技术 > >
题面
??
文章图片
??
文章图片
解法
bfs+DP :
??这道题的想法很妙,问了本校的很多大佬之后才搞懂。
??我们可以发现,刷题长自信值和回嘴/怼大佬是两个独立的过程,如果我们能够在保证自己的自信值 ≥0 的同时使得可以不用刷题的天数尽可能多,那么我们就可能打败大佬。
??所以我们设 f[i][j] 表示前i天,自信值为j时最多有多少天不用刷题, d[f][l] 变成讽刺能力为f,等级为l需要的最少天数,假设这个最大值为D,
??假设当前大佬的自信值为x, f[i][j] 的最大值为D,假设进行两次怼的操作,所需要的天数和造成的伤害分别为d1,f1,d2,f2
??那么当满足:D-d1-d2>=C-f1-f2时就可以怼死大佬(d1,f1,d2,f2可以为0)
??这样理解:怼两次大佬不能直接怼死了,必须要怼到刚刚好,即D>=d1+d2,C=f1+f2;或者说没有刚刚好,大佬还剩下C-f1-f2的自信值,自己还剩下D-d1-d2的天数,那么就可以还嘴把大佬搞死
??所以我们可以用DP求出f数组,用bfs求出d数组,求出来之后就可以解答。
??对于每一个大佬,我们把状态按照f排序,枚举其中一次怼的造作,用单调指针来扫另一次怼操作,记录另一次怼的最小值,如果发现满足等式那就可以直接输出1了。
复杂度
O( n?mc+玄学+m?cnt ),玄学就是bfs的状态数,不是很多,cnt是合法的状态数
【题解|【HNOI2017】大佬-dalao】代码
#include
#include
#include
#include
#include
#include
推荐阅读