- 博客(13)
- 资源 (3)
- 收藏
- 关注
原创 USACO算法系列十三——butter
题目:http://www.nocow.cn/index.php/Translate:USACO/butter 题目大意是找出一个牧场,使得奶牛到这个牧场的路径和最小。 最原始的想法是计算出这些牧场内部之间的最短路径,根据map[i][j] = min( map[i][j], map[i][k] + map[k][j]),然后所有奶牛到牧场路径和为 {求和cube[j] * map[i][j],j 从 1~MAX};(cube[j] 指第j个牧场的奶牛数)。因此代码如下:#i
2010-10-20 10:20:00 665
原创 USACO算法系列十二——msquare
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/msquare<br /> 看到这道题我还以为有什么比较捷径的策略,毕竟广度优先遍历,是很耗内存空间的,而且需要去重的话,不断遍历数组也是很费时的。但是看了参考答案以后,好像也没什么特殊的解法。所以就开始写了。<br /> 跟预期的一样,如果一遍遍的检索的话,在Test7的时候,会超时,但是如果用一个2^24次方的数组记录是否是否检索过,又很快超出了空间。思索了很久,终于想到了知
2010-10-19 19:46:00 484
原创 USACO算法系列十一——ratios
<br /> 前段时间因为有事出去了一段时间,很久没有碰USACO的题目了。<br /> 昨天又和同学聚会,看到很多同学都到各个大公司实习了,心里很是羡慕。想想自己,明年这个时候也到了我找工作的时间了,能不能找到一个比较好的工作,未来怎么走?我的人生又是什么样?感觉很是迷茫。而且转眼之间研究生阶段就要结束了,在研究生阶段不知道应该留下什么,能够在以后蹉跎的岁月里能够和我的子孙们分享,或者在即将作古之年,遥想起这段时间,觉得自己没有白走这段路。现在的我只想把自己提升到一个新的高度,而这个
2010-10-18 20:57:00 410
原创 USACO算法系列十——spin
题目:http://www.nocow.cn/index.php/Translate:USACO/spin 题目很长,而且比较难以理解。大概意思就是转动五个纺织轮子,直到他们的五个缺口重合为止。 没有好的想法,还好数据量不大,模拟吧。由因为转动360秒以后,所有轮子回到起始角度。因此如果360秒以后还没有出现重合情况的话,就可以退出循环了。 模拟累加轮子的角度并不难,难的是如何判断五个轮子重合呢?起初我也没有很好的方法,一个个去判断重合区域实在是太麻烦了。后来想到一个好方法。把36
2010-10-11 15:42:00 701
原创 USACO算法系列九——kimbits
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/kimbits<br /> 求出可以用<=K个1表示的长度为N的二进制串的最小的第I个数。又是01字符串,最先想到方法是遍历1~2^N-1的自然数,如果其中包含1的个数<=K个1表示,则计数加1,直到I为止。但是想想2^31次方可以表示接近2 0000000000的整数,肯定会超时的。<br /> 如果把二进制串当作二叉树的叶子节点,然后采用前序遍历的方式对二叉树进行遍历,往左边走,
2010-10-10 19:47:00 561
原创 USACO算法系列八——fact4
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/fact4<br /> 题目大意是求N!的倒数第一个不是0的位数值。题目也很明确跟我们说了:阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了。 因此用一个大整数来存储N!,然后再求倒数最后一位的尾数,似乎不太现实。我们假设N! = X * 10 ^ K(X的尾数不为0)。则我们要求的是X %10。但是即使是这样子的X也是非常大。我们又可以考虑一下,实
2010-10-10 09:13:00 488
原创 USACO算法系列七——stamps
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/stamps<br /> 邮票数可以显示最大连接自然数的问题,看到这道题目第一个想到的是整数划分问题。但是又很不一样。第一它不用考虑这个整数的所有划分情况,而是只要考虑整数是否可以被<=K个邮票表示。<br /> 最简单的想法,用stamp【N】数组表示邮票,然后递增考虑1到K*stamp【N】范围的自然数的划分,直到不能划分为止。为了加速我们可以对邮票面值先做一下排序,但是还
2010-10-09 20:27:00 472
原创 USACO算法系列六——contact
<br /> 题目:http://www.nocow.cn/index.php/Translate:USACO/contact<br /> 题目很长,又是奶牛,又是望眼镜,还有地外生物的。很佩服外国人的想象力,一道算法题也能联系出一部星际大战出来。<br /> 题目大意,简而言之,就是统计由01组成的字符串当中,长度在A到B之间(1<=A<B<=12)的字符串出现的频率,然后把前N个最大频率的字符串打印出来。<br /> 看起来是简洁多了,但是题目还是比较复杂的。想到了两种方案:<b
2010-10-08 22:48:00 3093
原创 USACO算法系列五——rect1
题目:http://www.nocow.cn/index.php/Translate:USACO/rect1 最简单的想法是声明一个N*N的二维数组,用于表示单位1的矩形,二维数组的初始值为1,表示初始的颜色。一层一层的往上覆盖,不断更新数组的颜色值,最后统计一下二维数组里面各个颜色的个数就可以得出结果了。然而这种想法存在着严重的缺陷,第一时间,每次更新都需要更新A * B的空间,因此时间为o(N*A*B),加上最后统计,因此时间为o( A * B),因此最后的时间为O(N*A*B),A*B已
2010-10-07 22:23:00 509
原创 USACO算法系列四——inflate
题目:http://www.nocow.cn/index.php/Translate:USACO/inflate 这道题目类似于算法与数据结构当中的01背包问题,只是这里的物品有数量的问题。但是还是可以用动态规划解决问题。 我们假设f[type][minute]表示对前面type种题目在minute分钟下最大的得分情况。用struct Problem{ int point; int minute;}结构体数组表示题目类型和分数。则 当type>1时,f[type][minute]
2010-10-07 14:21:00 762
原创 USACO算法系列三——agrinet
题目:http://www.nocow.cn/index.php/Translate:USACO/agrinet 这道题目没什么好说的,求图的最小生成树问题。有两种算法Kruskal算法和Prim算法。但是看了USACO的参考答案以后,发现自己对空间的利用还是不够。知道思想,如何用简单利索的语言实现,高效而准确。#include #include #define MAX 100#define LARGE 999999999using namespace std;
2010-10-07 13:48:00 484
原创 USACO算法系列二——fracdec
题目在:http://www.nocow.cn/index.php/Translate:USACO/fracdec 题目大意是,给出两个数,求出它们的商,小数中循环部分用括号括起来。 刚拿到这道题的时候,没有很好的想法,觉得如果直接double表示商,然后提取每位小数位判断是否循环。但是这样会出现以下问题:由于在C语言中,双精度(double)型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。 也就是他的小数位最多只有16位。
2010-10-07 13:36:00 672
原创 USACO序列一-humble
题目:http://www.nocow.cn/index.php/Translate:USACO/humble 题目的大意是,给你一些排序的质数,然后要你求出由这些质数作为质因子的第几小的丑数。 看到这道题的时候,有两种想法,第一种是遍历从最小的丑数开始的自然数,判断这个自然数是不是丑数,直到找到第n个丑数为止。这样做的好处是,想法简单,避免了由质数相乘得到的丑数的排序过程。代码如下:#include #include #define MAX 100using namespa
2010-10-07 13:28:00 502
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人