题解CF1133E K Balanced Teams
Posted kylin-xy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解CF1133E K Balanced Teams相关的知识,希望对你有一定的参考价值。
拿到手第一想法就是算一下每个人可以和他分一起的,然后贪心。很显然在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直接从上次的往后移就行。
以上是关于题解CF1133E K Balanced Teams的主要内容,如果未能解决你的问题,请参考以下文章
CF1133EK Balanced Teams(动态规划,单调队列)
codeforces 1133E K Balanced Teams