八月解题手记一

八月解题日志一




Augest_1


POJ2117 Electricity


关节点性质





Augest_1


POJ1644 To Bet or Not To Bet


DP/递推


这种算概率的递推不是第一次见到了







Augest_2


POJ2449 Remmarguts' Date

WOJ 1085 回家的路


K短路(有环)


A*算法


很经典的解法,Dijstra求最短路作为启发函数


期待弄懂第k简单最短路!

Augest_3


POJ2793 Cactus


图论


涉及环的判定,树的简单计数(乘法原理)等问题


先保证每一条边最多属于一个环——DFS和对边hash解决问题



DFS真是个奇妙的东东





Augest_3


POJ1769 Minimizing maximizer


线段树+DP


用线段树来得到一条线段该取的最优值








Augest_4


POJ3487 The Stable Marriage Problem


稳定匹配问题/稳定婚姻问题


很现实的方法——男方锲而不舍地去追求女孩,直到最后娶到一个对他不变心的女孩(一个女孩遇到一个更适合的女孩后就立刻变心转投新人),这样循环直到所有人满意为止


我只能说这个好现不现实……



The Stable Marriage Problem

function stableMatching {

Initialize all m ∈ M and w ∈ W to free

while ∃ free man m who still has a woman w to propose to {

w = m's highest ranked such woman

if w is free

(m, w) become engaged

else some mat (m', w) already exists

if w prefers m to m'

(m, w) become engaged

m' becomes free

else

(m', w) remain engaged

}

}




Augest_4


POJ2690 Yahtzee


集合DP


难点在于状态选择。


选择对规则做集合DP比较好——这样就现选前6个规则运用于哪几轮,到6轮的时候直接判断




Augest_4


POJ2166 Heapsort


构造法(堆的性质)


由一个元素的堆向后推,每次都是让1从顶到最下面一层就可以了

Augest_5



POJ2580 The Door/Key Problem


字符串处理+不断迭代BFS


输入处理才是麻烦的地方,很容易错


迭代BFS不断尝试得到更多的钥匙和开更多的门——如果不能更多了就没辙只能报告No





Augest_5


POJ1742 Coins


DP


有数量限制的背包问题


XBB问的题目,由于是LouTiancheng出的题目,我好好想了会……


不过事实证明3000+个AC的题目是简单的,跟无限数量的物品的背包问题有点像(每次记得限制下数量——另开一个数组记录),不过这种做法效率ms不是很好,那些人怎么搞的?

Augest_6


POJ2922 Honeymoon Hike


二分+BFS


很暴力的二分(先分200,再分200,范围还是很小的)





Augest_6


POJ3343 Against Mammoths


二分+二分图匹配+求不等式


求不等式得到能成功攻击的时间长度


二分后做BFS




Augest_6


POJ1751 Highways


MST+一点变化


对于已经存在的边,把他们的权值取0或负数



Augest_6


POJ1652 Holey Cloth


分层BFS


很经典的思想——对于每一块布都分离出来做BFS求洞的个数和大小



Augest_6


POJ1475 Pushing Boxes


BFSBFS

很经典的题目


难的地方在于保证推箱子次数一样的情况下再保证人走的路长度最小——把推箱子次数一样的全部搜完再退出!



不过状态转移的记录才是麻烦的地方——我用char数组存的人的走法,结果输出好多空白东西,跟官方数据在text下看不出区别——最后只能用两个*去卡一个输出,得到好多空白!













WOJ1341 Friends

ZOJ1492 Maximum Clique


最大团


目前硬搜过的


借用了别人的用位来表示是否选择,不过long long错了搞不定,最后用两个int写高精度


目前程序效率和简洁度都不行


待进一步研究

Augest_8


POJ3463 Sightseeing


Dijstra+递推


Oldmaner推荐的很经典的题目



Dijstra求最短路


然后就倒推符合长度的路径条数——由于每条边长度必定大于一,所以递推不会出现问题








Augest_9


POJ1394 Railroad


BFS


做两遍BFS,第一遍求最早到达时间,第二遍把图倒过来求最迟出发时间









Augest_10


POJ1364 King


差分约束


原来对差分约束死套公式,昨天差不多忘记了


套路型建图后bellmanford

Augest_10


POJ3678 Katu Puzzle


2SAT


第一次看到这么一种题……


然后我yy了一种不断假设的算法——事实证明是能够AC的,麻烦而已


2SAT有两种解法:一种就是假设后验证调整,还有就是转化为求图的强连通分量


图模型的难点在于模型转化,这个题把ANDORXOR都齐了


经典







Augest_11


POJ1860 Currency Exchange


Bellman——ford


很直接的模型,不过精度太搞人了——EPS1e-8终于过了








Augest_11


POJ2749 Building roads


二分+2-SAT


模型建立比较麻烦


出题人的报告:

Building roads

标程用的算法是二分查找,给定一个答案后,用2-SAT判断是否可行。下面主要说一下2-SAT问题的建模。用布尔变量Xi表示第i个牛栏连到第一个中转站,即Xi为真时连到第一个,为假时连到第二个。那么~Xi表示第i个牛栏连到第二个中转站,~表示布尔取反。 检查每一个约束条件,构造2-SAT的和取范式。


1ij不连到同一个中转站,就增加和取范式(Xi + Xj)(~Xi + ~Xj)


2ij必须连到同一个中转站,就增加和取范式(Xi + ~Xj)(~Xi + Xj)


设现在二分的答案是S。那么检查每一对牛栏ij(假设D1iD1j表示ij到第一个中转站的距离,D2iD2j表示ij到第二个中转站的距离,DD表示两个中转站之间的距离)。如果


3D1i + D1j S,就增加和取范式(~Xi + ~Xj


4D2i + D2j S,就增加和取范式(Xi + Xj


5D1i + D2j + DD S,就增加和取范式(~Xi + Xj


6D2i + D1j + DD S,就增加和取范式(Xi + ~Xj


剩下的只是用2-SAT的现成算法去判断是否有解。






Augest_11


POJ2723 Get Luffy Out


2-SAT


比较直接的模型——hash一下一对钥匙(当作一个变量的正反)就可以了


然后由于求最大的可能,二分一下再加如门上的限制, 然后2SAT就好了







Augest_11


POJ2162 Document Indexing


模拟+Trie


按规则模拟(这里让我从比赛一直错到晚上,忘记考虑最后一行后面没有行了——后来直接在后面加两空行)

建立Trie:超描每个单词建立Trie树,每个节点附带单词出现的Page信息

最后遍历Trie树输出








Augest_13


POJ3057 Evacuation


BFS+二分+二分图匹配


BFS求每个人到达任意门的最短路径长度


二分所有人能出来的时间t


将一扇门拆成t个点(拆点的原理:一扇门一个时间只能出去一个人),作人于带时间限制的门间的匹配


RE了好几次





Augest_16


POJ2679 Adventurous Driving


差分约束+DFS(种子填充?)


这个题的题意就很难懂!其实就是对于每个顶点,只有那些与起相连边中花费最小的边有效,然后求从起点到终点的最小花费路径,并得出最小花费路径中的最小路径长度


1、判断起点到终点是否存在路径(DFS

2Bellmanford求最小花费是否存在(判断负环)并求最短路径



第二步比较trick,我是下了数据才发现我为什么TLE——负环实在太小,很难传递到源点

所以松弛n次后发现负环直接DFS检验是否可以传递到源点






Augest_18


POJ3169 Layout


差分约束


hatelike分别列方程





Augest_18


Advertisement


贪心或差分约束


贪心的证明麻烦,不知道


差分约束的做法:


dis[i-1] - dis[i] <= 0

dis[i] - dis[i-1] <= 1

dis[a-1] - dis[b] <= min(b-a+1, k)


最后取dis[i] – dis[i-1] == 1i




Augest_18


POJ2501 Escape from Enemy Territory


BFS+二分+BFS


BFS标记每一格的无危险值;

再二分危险值后BFS求最短路



第一次居然是标记危险值的时候做10000BFS,由于有10001000格,必然TLE


二分的思想还是很重要……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值