- 博客(11)
- 收藏
- 关注
原创 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
原创 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 841
原创 USACO2011Open Silver Unlocking Blocks 题解
搜索搜索搜索! 每次把一块积木移动一步,而且每块积木内部的相对位置是不变的,那么每次只要记录积木任意一点的位置表示状态即可.为了方便,我们可以设为每个积木包围块的左上角的点. 如何实现?一种想法是暴搜!可惜T了…暴搜优化一下来个迭代加深,每次设定一个步数,可惜还是T了.由于问题为”最小步数” ,我开始想广搜.可是如何判重?积木位置可以随意移动,状态最多为(30*
2016-06-28 17:16:59 847
原创 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
原创 USACO2011Open Bronze 3lines 题解
[思路]符合 FJ的要求有两种情况:三条直线平行或者两条直线平行并与一条直线垂直.至于横竖的问题,可以通过反转奶牛的坐标转化成相同的方式.三条平行直线:把所有点的横坐标记录下来,如果不同的横坐标个数小于等于3,那么符合条件.两条平行与一条直线垂直:把所有的纵坐标和它们个数记下,也记下所有出现的纵坐标个数,再按照横坐标排序,再枚举一个横坐标a,表示这条
2016-06-28 17:01:22 1128
原创 CodeForces 160D Edges in MST 题解
[题意] 给出一个n个点m条边的无向连通图,判断图中每条边是否一定在最小生成树上. n,m[思路]由于最小生成树的性质,我们造出任意一棵最小生成树,并记录下与最小生成树权值相等的所有边.暴力版:沿着非树边x的两个端点走到它们的lca,在环上去找与x权值相同的边,如果找到,说明被替换的边和x都不一定在最小生成树上.暴力做法优化版:这里又有一个结论
2016-06-28 07:13:04 619
原创 CodeForces 444C DZY Loves Colors题解
[题意] 有n个气球,每个气球有一个颜色x,改变为y后,美丽值增加|x-y|. 对一个序列有两种操作:1. 把区间在[L,R]的颜色染成x.2. 询问区间[L,R]的气球的美丽值总和.n[思路] 区间更新,区间询问可以联想到线段树. 只是更新的时候有点复杂: 因为一个区间内的颜色不一定相同,无法一次性全部更新,那
2016-06-27 22:40:45 812
原创 CodeForces 444B DZY Loves FFT 题解
[题意] 给出一个的1~n的排列A,和一个长度为n,只有0,1的序列B,求序列C:Ci=max(aj,bi-j)(i 数据保证是随机构造的.[思路]这题坑啊.不怕难题,就怕水题ToT 因为数据是随机的,所以可以乱搞(什么鬼啊). //信息量还这么少!范围怎么大!不瞎搞怎么过!(@#*&….) 从大到小枚举50(或者更少)个
2016-06-27 22:33:07 927
转载 dfs序的常见用法整理
dfs序就是一棵树在dfs遍历时组成的节点序列.它有这样一个特点:一棵子树的dfs序是一个区间.下面是dfs序的基本代码:void dfs(int x,int pre,int d){//L,R表示一个子树的范围 L[x]=++tot; dep[x]=d; for(int i=0;i<e[x].size();i++){ int y=e[x][i];
2016-06-27 21:32:06 4804
原创 毯子 题解(COCI 2008-2009Final C)
[题意]N 块矩形毯子铺在地上。0秒时(0,0)处有一桶油倒了,然后开始流呀流,每秒往八个方向扩散一个单位。注意,这里的坐标描述一个单元格,不表示点。M个询问,每次问一个时间点被油染到的毯子面积(若有毯子重叠,面积也要累加,如一个单位格被三个毯子覆盖,那么被油染到之后就算3个单位面积)。[思路]50分:暴力!n*m枚举每个询问时每块毯子被染到的范围.直接把顶点算出.100分:
2016-06-26 15:53:13 895
原创 维修道路 题解
[题意]一棵n个节点的树,求两条路径s1,s2最大的长度积,满足s1,s2都是两点之间的最短路径,而且两条路径不含任何公共点.n[思路] O(n^2): 枚举树上的每条边,把此边从树上移除,那么原来的树就变成了两棵子树:所求的两条路径分别在两棵子树中.那么为了满足题意中的最大长度积,分别求出两棵子树的直径即可. O(n):
2016-06-26 15:45:20 574
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人