公共汽车
【问题描述】
一个城市的道路成了像棋盘那样的网状,南北向的路有n条,并由西向东从1标记到n,东西向的路有m条,并从南向北从1标记到m,每一个交叉点代表一个路口,有的路口有正在等车的乘客。一辆公共汽车将从(1,1)点驶到(n,m)点,车只能向东或者向北开.
写一个程序,告诉司机怎么走能接到最多的乘客。
第一行是n,m,和k,其中k是有乘客的路口的个数。
以下k行是有乘客的路口的坐标和乘客的数量。
每行内相邻两元素用一个空格隔开
【输出】
接到的最多的乘客数
【输入输出样例】
bus.in | bus.out |
8 7 11 4 3 4 6 2 4 2 3 2 5 6 1 2 5 2 1 5 5 2 1 1 3 1 1 7 7 1 7 4 2 8 6 2 | 11 |
【数据范围限制】
100%的数据:1 <= n <= 103, 1 <= m <= 103, 1 <= k <= 103;
每个路口的乘客数量不超过1000000。
package chang57;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.Scanner;
public class Bus {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(new File("bus.in"));
Writer wr = new FileWriter("bus.out");
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int arr[][] = new int[n + 1][m + 1];
for (int i = 0; i < k; i++) {
arr[sc.nextInt()][sc.nextInt()] = sc.nextInt();
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
arr[i][j] += max(arr[i - 1][j], arr[i][j - 1]);
}
}
wr.write(String.valueOf(arr[n][m]));
sc.close();
wr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
static int max(int a, int b) {
return a > b ? a : b;
}
}