公交車載人最大值問題

問題描述

規定公交車的出發點和終點,要求途徑站點,載人數最多,對於公交車的載人數不限。

算法分析

若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]);
}

該想法較爲簡單,也可將其擴展加入限制條件,進行程序改進

点赞