//16.1-1 活动选择问题的动态规划算法
#include <stdio.h>
#include <stdlib.h>
#define N 11
void dynamic_activity_selector(int *s,int *f,int c[N+1][N+1],int ret[N+1][N+1]);
void trace_route(int ret[N+1][N+1],int i,int j);
void dynamic_activity_selector(int *s,int *f,int c[N+1][N+1],int ret[N+1][N+1])
{
int i,j,k;
int temp;
//当i>=j时,子问题的解为空,即c[i][j]=0
for(j=1;j<=N;j++)
for(i=j;i<=N;++i)
c[i][j]=0;
for(j=2;j<=N;++j)
for(i=1;i<j;++i)
{
//寻找k,将问题分解为两个子问题,c[i][k],c[k][j]
for(k=i+1;k<j;++k)
{
if(s[k]>=f[i]&&f[k]<=s[j])//判断活动k是否满足兼容性
{
temp=c[i][k]+c[k][j]+1;
if(temp>c[i][j])
{
c[i][j]=temp;
ret[i][j]=k;
}
}
}
}
}
void trace_route(int ret[N+1][N+1],int i,int j)
{
if(i<j)
{
trace_route(ret,i,ret[i][j]);
if(ret[i][j]!=0)
printf("a%d ",ret[i][j]);
}
}
void main()
{
int s[N+1] = {-1,1,3,0,5,3,5,6,8,8,2,12};
int f[N+1] = {-1,4,5,
算法导论 16.1-1活动选择问题的动态规划算法 答案
最新推荐文章于 2022-12-04 08:03:00 发布