公交车载人最大值问题

问题描述

规定公交车的出发点和终点,要求途径站点,载人数最多,对于公交车的载人数不限。

算法分析

若M[i][j]记录载人数,在公交车行驶过程中,同步更新标记矩阵,得到出站人数最多。

对于初矩阵在站点坐标记录等车的人数,其余坐标为零。对于i和j来说,当i,j均为零的时候,车为出发点,载人数自然就是M[0][0];当仅i为零时,由于规定车只能朝下或者向右走,所以M[i][j]则只有来自左边的站点而没有上面的站点和当前结点的人数,即M[i][j]=M[i][j-1]+M[i][j];同理可得当j为0时,M[i][j]站点的人数,列出动态方程为下所示:
M[i][j]=Max(M[i][j-1],M[i-1][j])+M[i][j];

void zairen(int n,int m,int M[][10]){

    int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            if(i==0&&j==0) M[i][j]=M[i][j];
            else if(i==0) M[i][j]=M[i][j-1] + M[i][j];
            else if(j==0) M[i][j]=M[i-1][j]+M[i][j];
            else{
                M[i][j]=Max(M[i][j-1],M[i-1][j])+M[i][j];
            }
        }
    }


    printf("最大载重量为:%d",M[n-1][m-1]);
}

该想法较为简单,也可将其扩展加入限制条件,进行程序改进

猜你喜欢

转载自blog.csdn.net/qq_38046655/article/details/80247224