题目链接:http://poj.org/problem?id=3230
1 #include<iostream>
2 #include<algorithm>
3 #include<cmath>
4 #include<cstring>
5 #include<cstdio>
6 #define inf 0x3f3f3f3f
7 using namespace std;
8 const int N = 105;
9
10 int dp[N][N], in[N][N], to[N][N];
11
12 int main() {
13
14 int n, m;
15 while (cin >> n >> m && n != 0 && m != 0) {
16 memset(dp, -0x3f, sizeof(dp));
17 for (int i = 1; i <= n; i++) {
18 //dp[0][i] = 0;
19 for (int j = 1; j <= n; j++) {
20 cin >> to[i][j];
21 }
22 }
23 for (int i = 1; i <= m; i++) {
24 for (int j = 1; j <= n; j++) {
25 cin >> in[i][j];
26 if (i == 1) {
27 dp[i][j] = in[i][j] - to[i][j];
28 }
29 }
30 }
31 //cout << dp[1][1] << dp[1][2] << dp[1][3] << "\n";
32 for (int i = 2; i <= m; i++) {
33 for (int j = 1; j <= n; j++) {
34 for (int k = 1; k <= n; k++) {
35 dp[i][j] = max(dp[i - 1][k] + in[i][j] - to[k][j], dp[i][j]);
36 //cout << dp[i][j] << " " << i << " " << j << "\n";
37 }
38 }
39 }
40 int ans = -inf;
41 for (int i = 1; i <= n; i++) {
42 ans = max(dp[m][i], ans);
43 }
44 cout << ans << "\n";
45 }
46 return 0;
47 }