USACO
文章平均质量分 76
LIN452
(*╹▽╹*)
展开
-
USACO2011Open Silver Running Laps题解
//请忽略我把牛看作羊.... 由题意,我们可以得到 t*vi-t*vj=kC.那么i,j相遇的次数就是最大的k(整数).为了得到最大的k就要使t最大,而tmax=L*C/vmax. 那么 把式子整理得到: k=L*(vi-vj)/vmax.(向下取整) 对于第i只,它和速度比它小的每一只羊相遇的次数都能确定, 常见的思路就是运用前缀和把式子累加,但由于k是每两只羊之原创 2016-06-28 17:07:58 · 729 阅读 · 0 评论 -
USACO2011Open Bronze 3lines 题解
[思路] 符合 FJ 的要求有两种情况: 三条直线平行或者两条直线平行并与一条直线垂直.至于横竖的 问题,可以通过反转奶牛的坐标转化成相同的方式. 三条平行直线: 把所有点的横坐标记录下来,如果不同的横坐标个数小于等于 3,那么 符合条件. 两条平行与一条直线垂直: 把所有的纵坐标和它们个数记下,也记下所有出现的纵坐标个数, 再按照横坐标排序,再枚举一个横坐标 a,表示这条原创 2016-06-28 17:01:22 · 1123 阅读 · 0 评论 -
USACO2011Open Silver Unlocking Blocks 题解
搜索搜索搜索! 每次把一块积木移动一步,而且每块积木内部的相对位置是不变的,那么每次只要记录积木任意一点的位置表示状态即可.为了方便,我们可以设为每个积木包围块的左上角的点. 如何实现? 一种想法是暴搜!可惜T了… 暴搜优化一下来个迭代加深,每次设定一个步数,可惜还是T了. 由于问题为”最小步数” ,我开始想广搜.可是如何判重?积木位置可以随意移动,状态最多为(30*原创 2016-06-28 17:16:59 · 846 阅读 · 0 评论 -
USACO2011Open Gold Bookshelf 题解
可以把题目理解为在n本书中”切几刀”. 当n2)可以解决: dp[i]表示在前i本书,第i本书为当前书架的最后一本书的最小高度.dp[i]=min{dp[j]+mx[j+1,i]}且sum[j+1,i] 当n 通过dp[i]=min{dp[j]+mx[j+1,i]},当mx[j+1,i]为h[i]时,j越小越优.假设在i前面,第一本比i高的书下标为x,如原创 2016-06-28 17:48:19 · 839 阅读 · 0 评论 -
USACO2011Open Gold Balanced Cow Subsets
N的范围很小,可以联想到枚举子集和状压.但是如果直接枚举两个子集,显然是不够的.那么我们可以联想到折半枚举!Meet inthe Middle! 把n个数分成两部分A,B集合,答案子集的来源有以下几种: 1. A集合的子集. 2. B集合的子集. 3. 一部分是A的子集,一部分是B的子集. 对于1,2两种情况都可以直接预处理出: 枚举A的子集x,再枚举x的子集y,原创 2016-06-28 17:52:41 · 1027 阅读 · 0 评论