为后人整理hack数据及易错点
  • 板块P1174 打砖块
  • 楼主pengyule
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/11/12 20:22
  • 上次更新2023/11/4 00:47:02
查看原帖
为后人整理hack数据及易错点
300078
pengyule楼主2021/11/12 20:22

鉴于题解区已满,在讨论区整理一下常见的易错点及以前的好心人的Hack数据。

sample 1(原题样例,极弱)

3 4 2
9 N 5 N 1 N 8 N
5 N 5 Y 5 N 5 N
6 N 2 N 4 N 3 N

sample 2(yangwenbin,中等偏弱)

1 5 185
3985 Y 6951 N 2151 Y 1749 N 7413 Y 

sample 3(sipu6174,中等强的一组)

3 3 1
0 N 5 Y 0 N        
0 N 5 Y 0 N        
0 N 2 N 0 N

sample 4(communist,比较强的一组)

4 4 6
9 Y 9 N 1 Y 1 Y 
9 Y 3 Y 9 N 9 Y 
5 N 7 N 6 N 6 N 
3 Y 5 Y 6 N 7 Y 

坑点:

很多人都是上来第一眼看着很像分组背包,然后就写了一个分组背包,交上去发现好像是50pts吧,我没试过

那么首先第一就要注意对于 Y 的砖虽然说打完前后子弹数不增不减,但是你能打它的前提是你有>0颗子弹

第二点就是像我,所有转移的时候都在分组背包的枚举到 Y 转移的时候只要以它结束就都限制有>0颗子弹。这也是错的,因为如果能合理选择打砖块顺序就能把要打的Y全部打掉之后不以Y结尾,从而不需要最后还剩一颗

还有的人想到这一步就说那干脆就不限制>0了,会浪费子弹,结果又退步到第一种里去了

那么正确的做法就是把第一、二种结合一下:

我们按照没有>0限制算出所有列的前缀分组背包f1[列][子弹],同理后缀的f2[列][子弹],最后枚举最后操作的列(i),那么这一列就需要满足>0限制而1~i-1和i+1~n则不需要,那么就用f1[i-1][]+sum+f2[i+1][]更新一下答案,[]里面的东西以及sum的含义看代码吧不好解释

https://paste.ubuntu.com/p/SXKdF4yvG4/

2021/11/12 20:22
加载中...