USACO
文章平均质量分 56
gold_bridge
交流邮箱daijinqiao(at)163.com
展开
-
usaco training-Sorting a Three-Valued Sequence
//usaco training-Sorting a Three-Valued Sequence/* * 题意:写一个程序计算出,给定的一个1,2,3组成的数字序列 * 排成升序所需的最少交换次数 * 题目数据:2 2 1 3 3 3 2 3 1 * sort后: 1 1 2 2 2 3 3 3 3 * 第 1和3,4和7组数据可直接通过一次交换达到 * 2 1 2 2 3 3 3 3 1 * 1 1 2 2 2 3 3 3 3原创 2011-05-31 12:03:00 · 357 阅读 · 0 评论 -
usaco Betsy's Tour
搜索好题!!!思路:回溯本题难想的主要是如何剪枝,以提高搜索效率剪枝就是搜索进行时,对不满足条件的结果"剪掉",停止往下搜索做不必要的耗时对于一条合法的路径,除出发点和目标点外,每个中间点都必然有"一进一出"的过程当搜索到某节点时,考虑与其相邻的节点,如果(1)四周的节点K,如果只有一个与K相邻的未经过的点,则点K为必经点(2)当当前点周围有两个或以上的符合条件的必经点原创 2012-02-20 00:02:51 · 590 阅读 · 0 评论 -
usaco Beef McNuggets
1.没有得不到的数,最小的盒子为12.得不到的数无穷大,所有数的最大公约数大于1,因为得到的数只能为该公约数的倍数3.如果存在的话,结果不会超过最大的两个数的最小公倍数 证明见:点击打开链接4.多重背包/* ID: daijinq1 PROB:nuggets LANG: C++ */#include #include #include #include原创 2012-02-16 09:34:41 · 335 阅读 · 0 评论 -
usaco Fence Loops
1.floyd求最小环。设环中有最大编号的点为k,其邻接点为i,j,则以k为环最大编号点的环的最小长度为answer = g[k][i] + g[k][j] + i到j的最短路[路径中的节点编号小于k]2.构造图(难点)。输入边的信息。len[i] 记录第i条边的长度边表 adj[n][2][n]记录第i条边第0、1端第j条边的编号edge[i][2] 记录第i条边两端邻接原创 2012-02-17 21:15:50 · 453 阅读 · 0 评论 -
usaco Raucous Rockers
状态dp(i, j)表示前j首歌用前i个光盘最多放多少首考虑第i个光盘,可以放0,1,2...j首歌,共j + 1种情况因此有:dp(i, j) = max(dp(i - 1, k), val(k + 1, j)) 0 可以先做处理求出val(i, j)表示从序列i到j放入一张光盘的最大数量,即背包for(i,1,n)for(j,1,n){ for(k,i,j原创 2012-02-15 12:20:33 · 253 阅读 · 0 评论 -
usaco American Heritage
正常的想法是先通过先序和中序串构造一棵二叉树,然后后序遍历即可对于先序中的结点x,先通过中序串找到其在中序中的位置i,如果该节点有左子树则vis[i - 1] = true,如果该节点的有右子树则vis[i + 1] = true!!!传递的参数要用引用类型/* ID: daijinq1 PROB:heritage LANG: C++ */#include #include原创 2012-02-14 17:50:42 · 260 阅读 · 0 评论 -
usaco training-A Game
博弈问题双方都采取各自最优策略,可将其视为同一种方式令状态F(i, j) 为当前游戏者面临序列[i, j]时所能得到的最大分数由于游戏者在当前状态有两种选择方式,取其大值得:F(i, j) = max(num[i] + sum[i + 1][j] - f(i + 1, j), num[j] + sum[i][j - 1] - f(i, j - 1))初始palyer1先取,故结原创 2012-02-09 13:53:14 · 223 阅读 · 0 评论 -
usaco-The Tamworth Two
// usaco-The Tamworth Two/* * 类型:模拟 * 对于人 和 牛 各有10*10*4=400种状态,所以总共有400*400=160000种状态 * 模拟执行160000次,判断是否达到最终状态 * 用sign[i][j]记录是否达到该状态 i,j分别为人 和 牛的状态表示 * !!!当同一状态出现两次时,则这两种状态之间出现循环 * 在出现原创 2011-06-06 13:34:00 · 285 阅读 · 0 评论 -
usaco-zero sum
//usaco-zero sum/* * 类型:搜索 * 深度搜索所有的情况,记录符合条件的符号集 * !!!空格符号的处理,需确定当前数已经读完 * 读到空格处理当前数据,读到+或-处理前面的数据 * sum记录前面算式的值,tmp记录当前数据 * c记录上一操作符,cc记录当前操作符 */#include #include #includ原创 2011-06-04 12:45:00 · 275 阅读 · 0 评论 -
usaco-Overfencing
// usaco-Overfencing/* * 类型:搜索 * 求最远距离的最少步数,用宽度优先搜索 * 记录 两个出口位置 * !!!两个出口要同时搜索(每个点都要选择最近的出口) * !!!输出时分情况,按搜索最后一个节点的位置分(墙||空地) * 数据: * 3 3 * +-+-+-+ * | | * + + + + * |原创 2011-06-05 13:25:00 · 329 阅读 · 0 评论 -
usaco-Cow Pedigrees
//usaco-Cow Pedigrees/* * 类型:动态规划 * 状态表示:dp[n][k]表示用n个节点组成前 k(1、2、……k) 层深度的树的种类数 * 则结果可以表示为dp[n][k]-dp[n][k-1] * 根据树的左右子树确定该树,可以通过左右子树方案数来推该树的方案数 * 左右子树 相互独立 需要用乘法原理 * 状态转移:dp[n][k]=sum原创 2011-06-04 00:30:00 · 351 阅读 · 0 评论 -
usaco training-Runaround Numbers
<br />//usaco training-Runaround Numbers/* * 类型:枚举 * 思路:先判断是否满足不含数字0 和 数字无重复这一条件 * 后进行其他证明 * 将整数转化成数组的形式以方便进行数位操作 * 执行len(位数)次循环操作并作出相应的判断 *//* Compiling... Compile: OK Executing... Test 1: TEST OK [0.000 secs, 3028 KB] Test原创 2011-06-02 17:56:00 · 294 阅读 · 0 评论 -
usaco training-Subset Sums
<br />//usaco training-Subset Sums/* * 题目类型:DP-背包 * 状态表示:DP[i][j]表示前i个数放入背包中达到值j的方案数 * 对于第i个数 有两种方案:放 和 不放 得: * 状态转移方程:DP[i][j]=DP[i-1][j]+DP[i-1][j-i](j>=i) * 初始:DP[0][0]=1 * wa ac * 此题的方案数目超过int型范围,应为long long *//* Compiling... C原创 2011-06-01 11:09:00 · 264 阅读 · 0 评论 -
usaco training-Healthy Holsteins
<br />//usaco training-Healthy Holsteins/* * 题目类型:搜索 * 按照饲料种类的数量递增的顺序进行深度搜索 * 搜索时,对于种类i有两种方案(放 和 不放) * 题目要求输出编号小的所以先搜索放的方案 * 设置结束标志sign !!! * tle ac * 求和时处理不当,导致大量耗时 *//* Compiling... Compile: OK Executing... Test 1: TEST OK原创 2011-05-31 16:46:00 · 372 阅读 · 0 评论 -
usaco training-Hamming Codes
<br />//usaco training-Hamming Codes/* * 题目类型:搜索 * N<64 ,B<=8由于8位二进制数共有511个,数据量比较小可以直接暴力搜索 * res数组记录结果值,逐个搜索当前值,加入到res中 * 每次搜索从res最后的数字的下一个数开始,检查是否满足条件 * !!!注意输出,N=10时,注意不要多输出空行 *//* Compiling... Compile: OK Executing... Test 1:原创 2011-05-31 21:44:00 · 296 阅读 · 0 评论 -
usaco-orderd fractions
<br />//usaco training-Ordered Fractions/* * 题目类型:枚举 * 题意:输入一个自然数N,写一个程序来增序输出分母小于等于N的既约真分数 * 用双重循环搜索所有不同分子和分母的情况,将满足条件的分数保存起来 * 按分数的大小排序输出 *//* Compiling... Compile: OK Executing... Test 1: TEST OK [0.000 secs, 3188 KB] Test 2原创 2011-05-31 10:45:00 · 290 阅读 · 0 评论 -
usaco-the castle
<br />//usaco training-the castle/* * 题目类型:dfs * 将不同的房间通过深搜标记不同的num,并记录每个房间的大小 * 枚举每一堵墙,记录撤销该墙后的房间大小并更新最大值 * !!! 枚举墙的顺序,先列后行,自左下至右上遍历 * 墙: * left 1、3、5、9、7、11、13、15 * right 4、5、6、12、7、13、14、15 * down 8、9、10、12、11、13、14、15 * up 2、3、6、10、原创 2011-05-30 22:17:00 · 304 阅读 · 0 评论 -
usaco 3.3 Riding the Fences
题目:打印路径的欧拉回路[dfs实现]1、在图G中任意找一个回路C2、将图G中属于回路C的边删除3、在残留图的各极大联通子图中分别寻找欧拉回路4、将各极大联通子图的欧拉回路合并到C中得到图G的欧拉回路/*ID:daijinq1PROG:fenceLANG:C++*/#include #include using namespace std;#define MA原创 2012-04-18 08:42:57 · 343 阅读 · 0 评论