数三角形
题目大意:给出n(n≤100)个点(坐标都为非负整数),计算以这些点为顶点,一共能构成三角形的个数。
做法:n很小很明显可以直接暴力n^3枚举点,每次判断三边斜率是否有两条相同,而且必须满足三角形(两边之和大于第三边)这样就可以碾过去了。
4和7
题目大意:有n(n≤100,000)堆糖放在0到m(m≤1,000,000,000)的坐标轴上,从0开始每次可以向正方向跳4步或7步,求最大收集糖的数量。
做法:首先对所有的点按照坐标排序。可以设DP方程F[i]表示前i个点能取到的最大的糖果数量,显然F[i] = F[j] + a[i]。由于>17的数都能分成若干个4和7的和(这个怎么的来可以自己从4、7开始叠加推出),于是枚举j,当i与j的坐标差<=17时暴力判断是否能由4和7组成,坐标差>17时F[0..j]的值取最大值计算就好,此时可以维护一个g[i]表示F[0..i]中的最大值。
反射镜.
题目大意:在坐标轴中放着n(n≤100,000)面镜子,镜子均与坐标轴成45°角。所以共有两种类型的镜子:“\”型和“/”型。其坐标值的绝对值均不超过m(m≤1,000,000,000),镜子的两个面都能够反射光线,而中间不透光,例如,对于一个“/”型镜子,从下面射入的光线会被反射到右方向,而从左面射入的光线会被反射到上方向,现有一条光线从原点所在格子沿x轴正方向射出,求它走过T格路程后所在的位置。
做法:首先处理出每个位置的镜子在四个方向上最近是那个镜子,然后模拟光线反射就行了。但是有个问题,这些镜子反射光线可能会使光线形成环,这样就会超时,所以用记忆化记录一下就可以了。
总结:第一题就不说了。看到第二题,我就头疼了,这是我比较弱的一种题目,于是便先跳过去做第三题,我打了一个部分分的暴力,发现效率很低,于是开始想优化,最终得了40分....像第二题这种类型的题目以后要克服啊。