usaco3.3

 做这一节的题目感觉很奇怪,有的题目本机上能正确输出,提交后连编译都通不过,有的到后面的测试点输出罢工....,还有的已经想好算法,写代码却总是拖拖拉拉,最后连样例都过不了,大概是受到操蛋的校庆的影响......

======================================叨逼叨逼的分界=============================================

 

3.3.1 ride fence

 把找欧拉路的算法写错了...usaco3.3检讨在此

 

3.3.2 shopping offer

 嫌5维dp太麻烦了,用dfs写,提交后到test6 wa,但本机上结果正确,第一次碰到,同一份代码和数据,2次运行结果不一样...... 无奈用5维dp写(原来它也不麻烦啊),居然这次让我过了.

 

3.3.3 camelot

 刚开始把这题想复杂了。偷看了解答,原来如此暴力:枚举总集合点,枚举国王骑士集合点,枚举和国王一起的骑士...... 还好数据不大。计算步数用bfs,在2层循环中bfs(应该是flood fill)让我有点不敢写。

 一直以来对算法效率分析没有掌握神马技巧,究竟是高效还是低效,就大概看看循环层数,看来今后要好好研究下导论了.....,以后更高深的题目,应该都是各种算法的组合应用,不会只是单独写个bfs就能应付得了的.

 枚举国王骑士集合点有个重要的剪枝:仅枚举国王2步范围内的格子。

 伪证明(nocow的貌似错了应该是枚举2步范围内):

 对于处于王2步处的骑士,它可以一步跳到王1(或0)步处,此时step=2(或0)(王也走了一步),它可以接到王后再返回原来的地方,再奔向集合点,也可以直接奔向集合点。

  注意到相遇阶段的step都为2,奔向集合点的步数只有2种情况:

  设在王2步处相遇时,奔向集合点走得步数为step1;

  在1步处相遇,奔向集合点得步数为step2;

  step2在某些情况下比step1小,而比step1大时最多大1,因为如果这个点很糟糕,跳1步返回step1的点就行了。

  考虑上面的情况,要查找王+-2范围内的点

 

3.3.4 home on the range

 巨郁闷的一题,前面都还好好的,到第7个test不输出了,本机上好着呢既没超时,也没wa......想破脑袋也不知道为什么。nocow抄的代码编译都不让过...囧翻了。

 

3.3.5 A game

 第一次写博弈,偷偷看了答案,原来是用dp,方程:

 dp[i][j]= sum[i][j] - min{dp[i+1][j],dp[i][j-1]};

 dp[i][j]表示考虑board上第i到第j的数字,先行者的最优得分。

 sum[i][j] 表示i到j序列的总和。

 第一次提交wa,min函数居然写错了usaco3.3.

 

 

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

你可能感兴趣的:(USACO)