跳至正文

OI路程

USACO 3.1.2 Score Inflation 解题报告

  • OI路程

这题和第三章第一题一样,标准的无限01背包,直接把代码放进去就可以了,代码: / LANG: C ID: yylogoo1 PROG: inflate / #include int f[10001]; #define max(a, b) ((a)<(b)?(a):(b)) int main[......]

继续阅读

USACO 3.1.1 Agri-Net 解题报告

  • OI路程

这题的话,是最小生成树的标准题,但是最小生成树我不记得写了,后来想起来了之后发现这个二叉堆实现很麻烦,就看看标称的二叉堆是怎么实现的,结果标称直接暴力就是,呵呵,感觉有点投机取巧,因为数据小所以这样。 晚点捉摸下二叉堆的实现,先把这题的代码贴上来(暴力搜的) / LANG: C ID: yylog[......]

继续阅读

USACO 2.4.4 comehome 解题报告

  • OI路程

这一题其实很简单,只是有个陷阱,考验你们细心与否,就是两个牧场之间可能不只有一条路径,所以这里注意一下就不会出大问题,代码如下所示: de lang="c">/ LANG: C ID: yylogoo1 PROG: comehome / #include #define[……]

继续阅读

USACO 2.4.3 Cow Tours 解题报告

  • OI路程

这个题目涉及的算法真的好多好多,一下子还真摸不着头脑,但摸着没摸着都先听我说。 首先要把链接在一起的那些牧区之间的距离算出来(勾股定理),然后要把各个牧场的牧区标示出来(洪水填充),这样就能进行下一步了,再把各个节点之间的距离算出来,用floyd-warshall算法,O(n^3)的那个算法,然后[……]

继续阅读

USACO 2.4.2 Overfencing 解题报告

  • OI路程

题目看了之后容易发现就是广搜,从两个入口对全图进行广搜,搜到最后一个所需要的路程就是答案,广搜实现一点儿也不难,我的实现感觉还是比较好的,用一个宏和一个函数实现这个功能,然后用数字代表前进的方向,0:北,1:南,2:西,3:东。 但这题难的地方我觉得是把图转化成数据和寻找入口,其实难也不难,只是希[……]

继续阅读

USACO 2.4.1 The Tamworth Two 解题报告

  • OI路程

这题模拟的这个细节不用说把?就是俺顺序来,如果不知道的话看我的代码,这部分(deal函数)写的比较清楚,但是比较麻烦的问题是循环多久才结束呢?题目并没有说什么特殊条件那?呵呵,暗示的条件还是有的,在1010的牛和人在每个格子上最多就是4种方向吧?也就是说每个格子对每个人来说都有400种状态,那么40[……]

继续阅读

USACO 2.3.5 Controlling Companies 解题报告

  • OI路程

读取a公司控制b公司的股份c,再把这个股份加给所有控制a的公司上,如果可以产生控制一个公司的情况,那么就控制该公司,并且把其公司占有其他公司的所有股份都自己加一份,如果有可以控制的情况,那么继续控制。 代码如下: / LANG: C ID: yylogoo1 PROG: concom / #inc[......]

继续阅读

USACO 2.3.4 Money Systems 解题报告

  • OI路程

这个题目就是一个无限背包的例子,没有任何的修改,没有任何的特殊化,直接把代码搬进去就是的: / LANG: C ID: yylogoo1 PROG: money / #include long long f[10000]; int main(void) { int i, j, t; int[......]

继续阅读

USACO 2.3.3 Zero Sum 解题报告

  • OI路程

这个题目刚看到谁都觉得简单,爆容易,但是仔细一想,怎么去组合数字?怎么去把符号和数字放在循环里?都是需要解决的问题,我刚开始使用的是全局变量保存那些数据,忽然发现用全局的数据太复杂了,有好多数据需要改变再还原,所以只能用局部变量,每个函数拥有一套独立的参数变量,这样及时修改了也影响不到别的函数(这里[……]

继续阅读