拿到手第一想法就是算一下每个人可以和他分一起的,然后贪心。很显然在1s内被自己hack。所以贪心不行优先考虑dp。看到n和k的范围明显是个O(n^2)的dp。
由于我们不考虑顺序,按常规把水平排个序。
我的最初想法:
设f[i][j]:前i个人分了j组的最大和。
1.h[i]-h[lst]<=5 我们可以把他分到j-1组也可以分到第j组
2.h[i]-h[lst]>5 只能把i分到第j组
但我们遇到一个问题,就是我们不清楚第j-1组的开头到底是哪个。所以我又重新思考了一下:
f[i][j]=Max(f[i-1][j],f[lst][j]+i-lst);
此处的lst是最早的可以和i分到一组的,这样可以保证答案最大。
然后由于a[i]是升序的,这次的lst直接从上次的往后移就行。
原文地址:https://www.cnblogs.com/Kylin-xy/p/11698461.html
时间: 2024-10-12 15:35:19