请问这个是什么模型?一般用什么算法解决?

Davinci_1984 2008-09-27 12:53:21
题如下,比如一群人参与一个工作:

1. 每个人都有开始时间Si和结束时间Fi
2. 每个人开始后无法停留,必须坚持到结束
3. 每次只能一个人运作,就是说下一个必须在前一个完成后才能上

问:
1. 最长时间
2. 最多参与人数

eg:

输入:
3
0 5
0 1
1 3

表示:3人参与,第一人是0时开始,5时结束,依次类推...

数轴表示就是:
0__1__2__3__4__5
0__1
1__2__3


输出:
最长时间:5 (0-5)
最多人数:2 (0-1;1-3)
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoyoalphax 2008-09-27
  • 打赏
  • 举报
回复
Mark...
  • 打赏
  • 举报
回复
哎,帮顶!
Davinci_1984 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dlyme 的回复:]
将这n个活动按结束时间由小到大排序之后,假设此时有F(1) <=F(2) <=... <=F(n)

1.最长时间
用dp(i,T)来表示在时间T之前完成的、前i个活动所能安排的最长时间。那么状态转移方程:
if( F(i)>T )
dp(i,T)=dp(i-1,T);
else
dp(i,T)=max{ dp(i-1,T),F(i)-S(i)+dp(i-1,S(i)) };
最后dp(n,F(n))就是题目解。

2.最多参与人数
1)优先选结束时间最早的人;
2)将被选择的人、与刚才选择有冲突的人统统去掉,在剩下的数据中重…
[/Quote]

感谢,想起来了!!!嘿嘿,去写下先~等下放分!
yeah920 2008-09-27
  • 打赏
  • 举报
回复
帮忙顶一下,让了解的人来解答.
  • 打赏
  • 举报
回复
将这n个活动按结束时间由小到大排序之后,假设此时有F(1)<=F(2)<=...<=F(n)

1.最长时间
用dp(i,T)来表示在时间T之前完成的、前i个活动所能安排的最长时间。那么状态转移方程:
if( F(i)>T )
dp(i,T)=dp(i-1,T);
else
dp(i,T)=max{ dp(i-1,T),F(i)-S(i)+dp(i-1,S(i)) };
最后dp(n,F(n))就是题目解。

2.最多参与人数
1)优先选结束时间最早的人;
2)将被选择的人、与刚才选择有冲突的人统统去掉,在剩下的数据中重复1)直到过程结束。
证明过程不再赘述,网上有很多。
  • 打赏
  • 举报
回复
类似活动选择问题,第1问需要动态规划,第2问可以用贪心算法。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧