这题自己想了两天~~~各种超时...还是只能去拜读好些多大牛的文章..才搞定这题..这题真的很好很典型很经典阿..用到的主体思想是DFSID..为辅的是二分答案~~
所谓DFSID既是迭代加深搜索...名字挺玄乎~~实质上就是先确定一个搜索的层数..然后用DFS搜完整棵树..如果没找到解..那么层数再放深一些..再次DFS搜整棵树..直道搜出解为止..很类似BFS了..但是是用DFS来实现的..空间节约了N多..时间上也没有慢多少..
而这道题..就是枚举答案..也就是输出的那个能切出来的rail最大个数...稍微想下,若最大个数为K..那么肯定是前K小的rail...这样更加方便来枚举答案..若K这个解切不出..那么看K/2..若切得出至少一种方案看K*2..然后不断夹逼得出答案...也就是二分的枚举答案..确定一个数后..就以不超过这个数层数来DFS找有没有至少一个解~~
光是这样还不够..DFS时要剪枝~~NOCOW给的剪枝确实非常之强劲阿...
- 很容易就能注意到,由于每块rail的价值是相等的——也就是说切小的要比切大的来的划算。那么我们在搜索能否切出i个rail的方案是自然要选最小的i个rail来切。 ----这似乎是我唯一自己能想到的..
- 经过一些实验可以发现,先切大的rail比先切小的rail更容易提前出解。同样,[先切小的board比先切大的board更容易提前出解?]{注:好像先切大的board要比先切小的更快}。{*我的程序先切小再切大第5个点就TLE了,而先切大再切小就快很多,见C++程序.{跟我一样,握个手,一定要先大后小!!!}} ----这个感觉说不出个所以然..有谁能证明下吗?我的程序board先大到小更快
- 由于r最大可能是1023,但是rail长度的范围却只有0~128,这点提醒了我们有很多rail的长度会是相同的。所以我们要避免冗余,优化搜索顺序。若有rail[i+1]=rail[i],则rail[i+1]对应的board一定大于等于rail[i]对应的board。可以通过这种方法剪掉很多冗余的枝条。--这个应该能想到才对
- 相应的,如果board[i]=board[i+1],那么从board[i]切下的最大的rail一定大于等于从board[i+1]切下的最大的rail。--我的程序没用到
- 对于切剩下的board(无法再切下rail),统计一下总和。如果这个值大于board长度的总和减去rail长度的总和,一定无解,可以剪枝。这个剪枝最关键。 ---- 最最牛屎彪悍的剪枝~~这个真的是很巧妙...但仔细想也应该能够想到..这里似乎没说得太明白..我是看了其他人的博客..所谓剩下的board就是将所有剩余木板长度小于最小rail长度的这些剩余长度加起来..board长度总合就是1~N个木板长度的总合..rail长度总和是当前DFSID时确定个数K的前K小的rail长度总和..
- 二分答案 -- 必须的..一个一个的枚举过去铁超时..
- 其实在读入的过程中,如果rail[i] > max{board} 那么这个rail应该舍去 By Clarkok
Orz了..总之这道题是学习了!!!!
Program:
分享到:
相关推荐
usaco section2.3--section5.5源程序。。。。。。。。。。。。。。。。
此c++代码实现了USACO上Bessie Come Home的问题,并运用了弗洛伊德算法
USACO题目,Greedy Gift Givers
pku acm上的一系列usaco题目都可以在这里找到测试数据以及源代码,不过题目的名字和pku上有得有点出入,需要自己去比较一下,2002年
pku acm上的一系列usaco题目都可以在这里找到测试数据以及源代码,不过题目的名字和pku上有得有点出入,需要自己去比较一下,2001年
usaco测试数据+标程 usaco的section1到section5的所有测试数据 以及标准程序
usaco第五章fence3的解题代码,供算法初学者参考
我的USACO题解和程序
此C++程序是实现了USACO网站上的Magic Squares的问题。
USACO1-5单元AC的代码~ 1 Chapter1 1.1 Section 1.1 1.2 Section 1.2 1.3 Section 1.3 1.4 Section 1.4 1.5 Section 1.5 2 Chapter2 2.1 Section 2.1 2.2 Section 2.2 2.3 Section 2.3 2.4 Section 2.4 3 Chapter3 ...
CP问题 USACO,IOI,cp-algo,Code Jam和Hacker Cup档案中大多数问题的解决方案和一些解释。
这是USACO2001-2007月赛全集。 usaco是美国中学生的官方竞赛网站。是美国著名在线题库,专门为信息学竞赛选手准备。推荐直接阅读英语原文,既准确可靠又可提高英语水平。做题方式模拟正式比赛,采用标准测评机、文件...
usaco 2010-2011 nov news,喜欢usaco的朋友可以看看
资源包包括USACO 2001-2007年月赛的测试数据;usaco月赛十年题典(2000-2009),usaco月赛2002-2008题解。单独下载需资源分30分以上。为了方便编程爱好者,我这边统一下载打包。欢迎下载。
USACO chapter one.May hope it useful to someone
USACO chapter two.Useful for beginners.
节点模块依赖项在package.json文件中定义,因此可以使用应用程序根目录下的npm install进行安装。 配置 您可以在 settings.js 中设置一些设置。 每个设置都在 settings.js 内部进行了描述。 请注意,节日也是高度可...
第1行: 3个用空格隔开的整数:N,P,以及K第2..P+1行: 第i+1行为3个用空格隔开的整数:A_i,B_i,L_i第1行: 输出1个整数,为FJ在这项工
第1行: 1个整数,N第2..N行: 每行为2个用空格隔开的整数A、B,为两块相邻草地的编号第1行: 输出1个整数,即FJ最少建立无线电通讯塔的数目输入说明:F
USACO题解及中文译题1.1.1-2.4.5 题目为TXT格式文档,代码为C++语言所编写