题意:
大概是一个小朋友去游乐园,游乐园一个有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]})