- P1284 三角形牧场
做法:用背包推出这些木板可以构成哪些边(a,b,c),总长度知道,所以只需要两个维度;
错误:一开始看到n很小,想用搜索加剪枝,结果没卡过;其实应该注意到边长也很小,在搜索中会重复计算很多相同的(a,b,c);所以只需用背包表示出哪些边能够拼成,最后再统计即可
细节:最后求面积要开long long
- P1941 [NOIP2014 提高组] 飞扬的小鸟
做法:大部分人似乎都用的完全背包,就我太菜了没有想到。用两个维度表示小鸟在哪一个,如果暴力转移的话单次转移复杂度是O(M)的(如果用完全背包写法就没事了)。
发现从小到大枚举高度j时,模x[i-1]同余的所有j构成一个集合,集合中每一个j的决策集合仅比上一个模x[i-1]同余的j的决策集合多一个元素。
因此可以用一个minn数组,存下模x[i-1]等于0~x[i-1]-1的决策。
细节:注意维护minn数组时要加一
思考:完全背包似乎也能用这种方法做?
- P7074 [CSP-J2020] 方格取数
简单dp,似乎没啥好说的
- P7075 [CSP-S2020] 儒略日
去年csp第一题,模拟。
错误:一开始算分界点没看仔细算错了,调了很长时间,在考试中一定要稳住心态,不然一慌就gg了
还有就是发现错误后,要注意有没有改全。
- P1786 帮贡排序
很久之前做的,当时没调出来。原因是误以为用冒泡排序具有稳定性就可以自动在关键字相同时,按照输入顺序排了,实际上第一次排序时已经把输入顺序破坏了,因此必须要存储每个人的初始顺序进行排序。
- P3654 First Step (ファーストステップ)
又是道没一遍过的水题,错误原因是当k=1时,上下方向会重复统计
- P2865 [USACO06NOV]Roadblocks G
题目:求1到N严格次短路
做法:
先求出起点到所有点的单源最短路,设为d1[],同理求出终点到所有点的单源最短路,设为d2[]
枚举每条边(x,y,z),如果这条边出现在次短路上的话,其一定满足d1[x]+d2[y]+z>minn,显然次短路一定可以通过这种方式得到,每次更新求最小值即可(次短路不一定只换最短路的一条边,但一定可以通过这种方式得到)
- P3008 [USACO11JAN]Roads and Planes G
这道题做法在lyd书上讲的很详细,这里说一些细节
第一,在拓扑排序最初时,虽然入度为0的联通块其内部节点的d值一定是正无穷,也就是“No Path”,但还是要把他们入队,这样才能更新其他能到达的联通块的deg
第二,最后输出时,如果直接判断d值是否为inf,来判断是否为“No Path”是不准确的,原因是几个联通块之间的边权可能为负,d值在这个过程中可能会缩小,这是不合法的。
解决方案一是在更新两个联通块之间的边时判断若起点为inf,则终点也为inf
二是在输出中设一个阈值,只有小于这个阈值才正常输出,否则都判定为“No Path”
- P4042 [AHOI2014/JSOI2014]骑士游戏
最短路好题,单独写一篇博客
posted @
2021-10-05 19:30
glq_C
阅读(
38)
评论()
收藏
举报