题意:
大概是一个小朋友去游乐园,游乐园一个有
n
个项目,第
其中:
分析:
定义:
dp[n][t]
表示小朋友前
n
个项目中,一共玩了
由此可以知道转移方程为:
dp[n][t]=min(dp[n−1][t],t−max{a[i]|i为所有被选择的项目的脚标}+1)
容易看出来,后面更新的一块是一个很难解决的过程。如果 a[n] 是最大值,那么方程就变成了:
dp[n][t]=min(dp[n−1][t],t−a[n]+1)
但是 a[n] 可能不是最大值?这个时候里面的那部分更新起来非常麻烦。
这个时候,如果我们对原序列进行一次排序, 从小到大,那么我每一次更新的 a[n] 就会变成之前所有序列里面的最大值,然后题目就做完了。
复杂度: o(n∗n∗max{a[i]})