2014.08.12集训总结 NOI(P) 模拟赛Day1

来源:互联网 发布:淘宝5年老店标志没了 编辑:程序博客网 时间:2024/04/27 19:38

今天的题目还是相当有意思,有内涵,够暴力,我喜欢。

symbol说今天的题目比全国赛难,其实就是分数比较难看,题目还是相对靠近NOIP难度的。。

读题的时候只有第一题有思路,当时估计的难度是 1 2 3 ,最后看起来还是没有错的。


T1 :过河

题目大意:(不好说,上原题吧)

有(N+1)个平行于y轴的河岸排成一排,每两个河岸之间夹着一条河,所以一共有N条河。第i 条河的宽度为wi,在第i 条河中行进的速度为vi。河岸的宽度忽略不计。令X=sigma(wi)。

规定:

1、从(0,0)出发,终点是(X,Y)。Y是一个给定的整数。

2、在渡河时,必须从一个整点驶向另一个整点,花费的时间为这两个点的欧几里得距离除以速度。

3、可以在河岸上行走,但也是必须从一个整点走向另一个整点,速度为给定的u。

求花费时间的最小值。


数据范围:

对于30%的数据,N<=50,Y<=500;
对于60%的数据,N<=50;
对于100%的数据,N<=50000;
对于100%的数据,u<=10^5,wi<=10^5,vi<=10^5,Y<=10^5。


博主坚持发数据范围,是因为“水分”这种比赛策略。

对于NY^2的算法还是很容易想到的 F[I][Y] 表示走到第I个河岸,高度为Y的最小值 ,

F[I][J] = MIN(F[I-1][K] + DIS([I,J] , [I-1,K]) / V[I]) 1 <= K <= J

博主由于一直想不到T2 T3怎么做 ,于是就一头栽在第一题,看看能不能删去一维。

事实上,根本不用DP。

直接贪心就好了。

Y每升高1,证明某一条河的增量增加了1 (例如 :原本是(2,2) --> (5,3) 现在就是(2,2) --> (5,4) ) 这之间增加了一定的值(代价),我们要让这个值最小,就是最优的情况。

枚举Y,每次找出最小的增量,O(NY);

找增量可以用堆来解决,O(Y log N),解决。


T2 : 逃离迷宫

题目大意:给出一个N×M的迷宫(N×M<=1000),每个格子上下左右都连通,每个格子均有一个高度,从一个格子行走到另一个格子需要消耗一定的体力(高度差的平方),有K个格子中有回复一定体力的药水(K<=15),每瓶药水只能喝一次,求从起始格子走到终点格子所需要消耗的最小体力。

数据范围:

对于20%的数据,k=0。

对于60%的数据,n<=20,m<=20,k<=10

对于100%的数据,n*m<=1000,k<=15,s<=10^5,0<=h<10


对于K=0的情况,直接SPFA找出最短路就好了。

我们观察发现,K最多只有15,点阵也最多只有1000。由于SPFA的复杂度,我们可以求出15个点两两之间的最短路。

求出以后,这就是一个状压DP

F[I,S] 表示当前到第I个点,状态为S的最小代价(注:若S = (101)2代表目前已经走了第一个和第三个点【这两个点的药水已经被拿走了】

枚举J,J为S中未出现的,F[J,S or (1 << (J - 1))] = MIN(F[I][S] + DIS[I][J] - YAO[J]);


一开始已经想到只有15个点,也求出了SPFA,可惜,比赛时没有想到用DP来决定顺序,而是一味的想如何搜索,思维不够灵活,对状压DP也没有足够深的理解。


T3 :幸运数

题目大意:

求1..N中幸运数的个数(N<=10^9),其中一个数为幸运数的要求是这个数的质因子都不超过M且每种质因子的个数为奇数(M<=10^6)。

数据范围:

对于20%的数据,n<=10^4,m<=10^4;

对于40%的数据,n<=10^7,m<=10^6;

对于80%的数据,n<=10^8,m<=10^6;

对于100%的数据,n<=10^9,m<=10^6。


一看数据范围,20分肯定是有的,暴力判断每一个数就好了。

比赛时想到一种思路:用质因数来有机组合,组合出我们想要的幸运数。由于时间关系,没有打出来。

比赛后:我的思路是对的。

如果不加剪枝,那么只有40分。

剪枝如下:

对于当前枚举到的质数PR[I] , 设前面枚举的质因数的积为S。

S*PR[I]^2 > N ,对于后面的质因数(包括PR[I]),最多只会选一次。这样组合出来的数才会小于N。

若S * PR[K] >N , K后面的质因数(包括K),是选不上的。

S*PR[I]^2 > N 时, 二分找出K , ans += K - I 就好了。

加了剪枝就能过非常暴力的题目。


题目难度不高,但是思路很巧,方法很暴力,还是要加强思维训练。

脑袋转不过弯来,很多东西没想到,一点一点慢慢来把。

0 0