动规初体验
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int MAX = 100;
int cost[MAX+2][MAX+2];
int income[MAX+2][MAX+2];
int ans[MAX+2][MAX+2];
int main()
{
int n, m;
int temp;
while (scanf("%d%d", &n, &m) && n && m)
{
memset(income, 0 ,sizeof(income));
memset(cost, 0 ,sizeof(cost));
memset(ans, 0, sizeof(ans));
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++) scanf("%d", &cost[i][j]);
}
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++) scanf("%d", &income[i][j]);
}
for (int i = 1; i <= n; i++) ans[1][i] = income[1][i] - cost[1][i];
for (int i = 2; i <= m; i++)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= n; k++)
{
ans[i][j] = max(ans[i][j], ans[i-1][k] + income[i][j] - cost[k][j]);
}
int max_ans = 0;
for (int i = 1; i <= n; i++) max_ans = max(max_ans, ans[m][i]);
printf("%d\n", max_ans);
}
return 0;
}