void maxValue(pAct acts,int *values,int *Trace)
{
for(int i=0;i<N;i++)
{
values[i]=acts[i].value;
Trace[i]=-1;
}
for(int i=0;i<N;i++)
{
for(int j=i+1;j<N;j++)
{
if(acts[j].start>=acts[i].end)
{
if(values[i]+acts[j].value>values[j])
{
values[j]=values[i]+acts[j].value;
Trace[j]=i;
}
}
}
}
}
void printTrace(int *Trace,int *values)
{
int max=0,k;
for(int i=0;i<N;i++)
{
if(values[i]>max)
{
max=values[i];
k=i;
}
}
while(k>=0)
{
printf("a[%d] ",k+1);
k=Trace[k];
}
}算法导论 练习题 16.1-5
最新推荐文章于 2024-06-24 12:25:52 发布
本文介绍了一个活动选择问题的解决算法,通过动态规划方法找到最大价值的活动集合,并使用回溯方式打印出活动序列。该算法适用于需要从多个不冲突的任务中挑选最有价值组合的场景。

5767

被折叠的 条评论
为什么被折叠?



