洛谷 P9100 [PA 2020] Miny 题解
这道题难点在于状态设计。考虑线性 DP,设 \(dp_i\) 为仅考虑前 \(i\) 个地雷且钦定第 \(i\) 个不引爆的方案数。这样设计的好处在于 \(i\) 前面的地雷一定不会引爆 \(i\) 后面的,从而满足无后效性。注意需要在左右无穷远处各添加一个爆炸半径无穷大的哨兵地雷,下标分别为 \(0\) 和 \(n+1\),确保哨兵能引爆所有地雷。答案即为 \(dp_{n+1}\)。
然后考虑转移。对于每个 \(i\),枚举所有 \(j>n; a={-INF,INF,-INF,INF}; a={INF,INF,-INF,INF}; r=r=n+1; dp=1; rept(i,1,n){ cin>>a.p>>a.rad; a.lb=a.p-a.rad; a.rb=a.p+a.rad; } st=0; rept(i,1,n){ int L=1,R=top,mid; while(L>1; a].rb>=a.p?L=mid:R=mid-1; } l=st; while(a].rb>1; a].lba.lb) --top; st[++top]=i; } rept(i,1,n+1){ if(!l) ++l,++dp;// 特判从dp转移 if(l>1) q-1].eb(i,-1); if(i>1) q.eb(i,1); } rept(i,1,n+1){ add(r,dp); for(auto :q){ (dp+=k*(ask(n+1)-ask(id-1)))%=P; } } cout 用心讨论,共获提升! 鼓励转贴优秀软件安全工具和文档! 收藏一下 不知道什么时候能用到 谢谢分享,辛苦了 感谢分享,学习下。 懂技术并乐意极积无私分享的人越来越少。珍惜 不错,里面软件多更新就更好了 过来提前占个楼 鼓励转贴优秀软件安全工具和文档! 懂技术并乐意极积无私分享的人越来越少。珍惜 热心回复! 这个好,看起来很实用 这个有用。 鼓励转贴优秀软件安全工具和文档! 感谢分享,下载保存了,貌似很强大 感谢分享,下载保存了,貌似很强大 谢谢分享,辛苦了 感谢分享,学习下。 yyds。多谢分享
页:
[1]
2