高级农民
 
- 积分
- 1644
- 学分
- 个
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- UID
- 24790
- 注册时间
- 2011-2-8
- 最后登录
- 1970-1-1
- 在线时间
- 小时
- 好友
- 收听
- 听众
- 日志
- 相册
- 帖子
- 主题
- 分享
- 精华
|
本楼: |
👍
0% (0)
|
|
0% (0)
👎
|
全局: |
👍 100% (32) |
|
0% (0) 👎 |
可以优化到O(n log n)
按开始时间排序做DP
按结束时间排序,一边做DP,一边按这个顺序往堆里插
每次 ...
vvnesaa 发表于 2011-4-19 19:42 
O(n^2)的dp大概是这样:
- for(int i = 1; i <= n; i++)
- dp[i] = -INF;
- dp[0] = 0;
- for(int i = 1; i <= n; i++)
- for(int j = 0; j < i; j++)
- if(seg[i].start >= seg[j].end)
- dp[i] = max(dp[i], dp[j]+seg[i].score);
复制代码
其中seg是按开始时间和结束时间排过序的。
你说的优化到O(nlogn)到一时没想明白,能具体解释下吗? |
|