問題描述
規定公交車的出發點和終點,要求途徑站點,載人數最多,對於公交車的載人數不限。
算法分析
若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]);
}
該想法較爲簡單,也可將其擴展加入限制條件,進行程序改進