usaco
文章平均质量分 81
mnlm1991
这个作者很懒,什么都没留下…
展开
-
usaco 4.1.2 Fence Rails 搜索剪枝
这个题是我做usaco第一个不看解题报告做不出来的题目。题目大意:有N根木料,和需要R根木板,我们就要判断最多可以用那些木料可以切出多少根木板。木料和木板的长度都可能是不同的。N 根据木板的长度小于128我们可以知道有很多种重复的木板长度是我们需要的,这里就是剪枝的关键所在了。我们当然知道是用深搜判断能否切出X根木板。我是一个一个木板搜,看看能不能满足要求。首先是判断最大的根数,然后递减的判断能不能满足条件。很容易证明能切出X根木板,就一定可以切出X小的木板,所以我们要先把木板排序,然后搜索。剪枝:1 如原创 2010-12-17 23:16:00 · 1067 阅读 · 0 评论 -
usaco 4.1.4 Cryptcowgraphy 搜索剪枝
<br />又是一道搞得我头晕的题,也是看解题报告才会做的。<br />刚开始还是用宽搜,超内存了,我还以为这道题宽搜和深搜都一样。<br />题目的大意:给你一串字符让你判断能否通过交换COW中的CO和OW之间的字符然后去掉COW 这种变换变成原来的那串字符;<br />剪枝:<br />1 字符串哈希函数,判断是否已经出现过这种字符串。我刚开始是用STL中的SET去判断的,到了第9组数据就不行了。看书对字符串HASH也不熟,都是网上找的代码的。<br />2 判断在COW这些字母之间的字符串是不是在原创 2010-12-17 23:29:00 · 720 阅读 · 0 评论 -
usaco 4.3.1 Buy Low, Buy Lower DP + 高精度
这个题我觉得高精度到没有什么问题,主要是怎样去DP,第一问也不是问题主要是第二问,刚开始我也不知道怎样会产生重复的序列,后来看了下别人的解题报告,才知道原来是像 7 5 5 1 这样就会有两个7 5 1的序列,我们主要是要去掉这个重复的。我的想法好像别人的不一样,我是先把这个序列排序,然后得到他们的rank然后开一个dp[5001]的数组表示到达i个数是各个rank的最大长度。代码:/*ID: mnlm1991PROG: buylowLANG: C++*/#include#inc原创 2010-12-21 18:51:00 · 633 阅读 · 0 评论 -
usaco 4.3.2 The Primes
<br />开始的时候自己写的代码最多只能过7组数据。我一直想不把输出存起来,直接找到一个就输出,这样的话就只能一行一行枚举,这样的话填的时候限制条件就很少了。搞到最后所有可以想到的剪枝都用了,还是只能过7组数据。没办法只好搜一下解题报告,原来别人都是把输出存起来的。这样的话限制条件就多了。<br />填表顺序:<br />第一行,第一列;<br />左下到右上;<br />左上到右下;<br />第二行,第二列,第四行,第四列;<br />第三行,第三列;<br />这样的顺序就是为了使限制条件尽可能的多原创 2010-12-25 11:30:00 · 629 阅读 · 0 评论 -
usaco 4.3.3 race3
<br />这个题不难,就是求一个有向图的割点,还要求这个图化成无向图的割点。<br />我是先判断是不是有向图的割点,如果是割点再来判断是否是无向图的割点。因为我是用搜索判断是否连通的,在搜索过程中从开始点可以不通过要判断的那个点到达终点就表明这个点不是割点,在判断的过程中我有标记是否可以从开始点到达某个点,所以如果一个是有向图的割点,那么就只要判断它能不能从这个点出发能不能到达之前标记过的点,如果可以则不是无向图的割点。<br /> <br />代码:<br />/*ID: mnlm1991PR原创 2010-12-29 19:01:00 · 576 阅读 · 0 评论 -
usaco-4.4.1-shuttle
<br />这道题做起来挺杯具的,刚开始用BFS,爆内存了,我是用set判重.上网看了一下大部分都是用构造法,我哪知道怎么构造啊,不过还好也有人用BFS,我看了一下他们的好像是用贪心+BFS,就是B只能向右走,而W只能向左走.其实也不怎么理解为什么一定要这样,我也改了一下反倒过了.也不知道怎样去证明为什么那样就可以了.<br />/*ID: mnlm1991PROG: shuttleLANG: C++*/#include<cstdio>#include<cstdlib>#in原创 2011-04-09 17:20:00 · 647 阅读 · 0 评论 -
usaco-4.3.4-lgame
<br />这个题以前看到了都不敢做,就停了几个月做usaco,重新做的时候发现这个题好像并不难.<br />我是把每个单词都排序,然后用字典树存起来,然后对输入的单词同样对其排序,这样就会比较容易找到只有一个单词构成的最优解.在这个过程中同时找出可能用于二个单词的最优解的单词.然后就是遍历所有可能找出最大值.<br />/*ID: mnlm1991PROG: lgameLANG: C++*/#include<cstdio>#include<cstdlib>#include<原创 2011-04-09 17:16:00 · 636 阅读 · 0 评论