T1.过河【river】
【题目大意】
有(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。
【解题思路】
对于30%的数据,可以写DP,状态为F[I][J]表示到第I个河岸到第J个纵坐标,显然,随着河岸编号的递增,最优的路线必定是Y坐标不降的。所以DP时间复杂度小于O(N*Y*Y)。
对于60%以及100%的数据,使用贪心算法。一开始我们假设每次过河,河对岸的Y坐标与所在岸的Y坐标差值为0(后文中设该值为Y)(既平行于X轴)的方式过河,并通过河岸竖直走Y个单位。然后当存在某一条河其Y+1的路线代价比起Y的路线以及一个单位的河岸路线的代价和小,所以我们找到这个代价最优的,对答案进行修改。60%的数据为每次暴力找最优,100%的数据为用堆结构维护最优值。
T2.逃离迷宫【escape】
【题目大意】
迷宫为N*M的四联通网格图,从一个格子到另一个格子消耗体力为两个格子之差的平方,某些格子上有体力药水,求从起点到终点消耗体力最小值。
【数据范围】
对于60%的数据,n<=20,m<=20,k<=10
对于100%的数据,n*m<=1000,k<=15,s<=10^5,0<=h<10
【解题思路】
暴力60分。对于100%的数据,维护K个点再加起点、终点相互间最短路,然后F[I][S]表示到第I个点,走过的点状态为S,100分。
T3.幸运数【lucky】
【题目大意】
如果一个正整数的所有质因子都小于等于M且每种质因子个数都为奇数,则称这个数为幸运数。求小于N的幸运数。
【数据范围】
对于40%的数据,n<=10^7,m<=10^6;
对于100%的数据,n<=10^9,m<=10^6。
【解题思路】
对于部分分,暴力碾过还是比较好想的,这里不详细讲。对于100%的数据,实际是暴力加优化,得到小于等于M的所有质数,暴力枚举每个质数取多少次幂或者不取。优化:假设当前累积的值为X,取到第I个质数,当X*P[I]*P[I]>N那就证明从P[I]到P[K](P[K]为最大的一个质数满足P[K]*X<=N)一系列的质数能且只能取其中之一或者不取,直接累加答案,然后推出DG,过了,而且跑得飞快。
【总结】第一题想到是贪心,但是没有想到分层,一个一个的贪心,要记住这种方法。第二题这种迷宫型然后特殊点比较少的题目做了不少,但是预处理加DP的思考方向不牢固。第三题则是对于数论的知识有所欠缺。
【需要改进的地方】 记住每一道题目的解法以及思考方向,学会一种方法而不是学一道题目。