估分:20+100+10=130
实际得分:70+30+30=130
又是估分很准,但是题目不是很对应。
考试时没有看懂题目,以为可以不连续,但实际上连续更优。
我们可以证明取连续的一段区间是可以满足要求的。
取每一位的前缀和,加上0一共有n+1项,当每一位上的数都模上n后的取值只有0~n-1一共n中,因此必定有一种重复,取两个重复的端点相减的差一定能整除n。
因此,我们对于每个位置上的数记录在一个桶中,当有出现重复时取这个区间的数就可以了。
当然,你也可以用2^n暴力做这道题。
考试时就打了一个暴力,但因为数组开小了而只有70分,开大后就过了。
扫描二维码关注公众号,回复:
8701169 查看本文章
设f[i][j]表示前i个点,用了j个邮局的最小距离和。
则f[i][j]=min{f[k][j-1]+在k+1到i之间最优放置一个邮局的花费}。
其中花费可以直接根据中位数计算。
也可以通过递推,i~j的最优答案等于i~j-1的最优答案+a[j]-a[(i+j)/2],因为中位数移动可以看做没有贡献的变化,只需要加上新加进来的数的贡献即可。
考试时没有想到,此类题要多向dp方面想。
首先我们将分数化简成最简分数。
考虑十进制下转成x进制时必须不断乘以x,每次取整数部分,知道为0,那么这个x进制必须包含所有的分数中分母所有的因子。
那么答案就是将每个分母质因数分解后将所有不同的质因子乘起来就是答案了。
总结:
多多思考,
能力还有所欠缺
加油。