Algorithm 活动选择贪婪方法(修改)

Algorithm 活动选择贪婪方法(修改),algorithm,greedy,Algorithm,Greedy,可能重复: 我正在解决以下修改的活动调度(贪婪方法)问题: 给定一组n个活动的开始时间,Si和fi,第i个活动的完成时间。此外,考虑到重量wi,即Foo开展第i项活动所赚取的成本 问题是选择使foo收益最大化的活动。我们必须返回foo可以赚取的最大成本。假设foo一次只能处理单个活动 注:: 这类似于经典,这里唯一的区别是,对于每项活动,我们都有一个成本wi。这里的目标太不一样了——在这个问题上,我们不是要找到相互兼容的活动的最大规模集,而是要找到使foo总收益最大化的活动集 范例 Total

可能重复:

我正在解决以下修改的活动调度(贪婪方法)问题:

给定一组n个活动的开始时间,Sifi,第i个活动的完成时间。此外,考虑到重量wi,即Foo开展第i项活动所赚取的成本

问题是选择使foo收益最大化的活动。我们必须返回foo可以赚取的最大成本。假设foo一次只能处理单个活动

注::

这类似于经典,这里唯一的区别是,对于每项活动,我们都有一个成本wi。这里的目标太不一样了——在这个问题上,我们不是要找到相互兼容的活动的最大规模集,而是要找到使foo总收益最大化的活动集

范例

Total activities N=4
Si fi wi
0 1 4000
2 5 100
1 4 3000
4 5 2500

Max earning=9500 (Answer)

如何修改经典的贪婪活动选择算法来解决这个问题。我应该用什么逻辑来解决上述问题?

我不知道如何贪婪地解决这个问题。我能看到的解决方案是动态规划,在动态规划中,你必须解决子问题

F(n)=Foo只在第n天之后工作可以获得的最大利润是多少

那么递归公式就很清楚了:对于在时间si=n开始的每个活动,F(n)要么等于F(n+1)(在Foo在第n天不工作的情况下),要么等于F(fi)+wi的最大值


编辑:假设活动的结束时间是f0谢谢!!!!您好,我不能正确理解,您能提供伪代码吗?我想,上面的dp不起作用。对于上面的例子,它甚至失败了。我想它会的。F[5]=0,F[4]=max(F[5],F[5]+2500)=2500,F[2]=max(F[4],F[5]+100)=2500,F[1]=max(F[2],F[4]+3000)=5500,F[0]=max(F[1],F[1]+4000)=9500。在你说事情行不通之前,试着去理解它们。
for n = N to 0:
    F[fn] = F[fn+1]
    for each activity (si, fi, wi):
         if si == fn: 
             F[fn] = max(F[fn], F[fi] + wi)