1 条题解
-
0
C :
#include <stdio.h> #include <string.h> #include <limits.h> int main(){ int m, n, i, j, k, maxIcomes, tmp, flag; int pay[128][128], incomes[128][128], maxIcomesEveryDayAndCity[2][128]; while (1){ scanf("%d%d", &n, &m); if (n==0 && m==0){ break; } for (i = 1; i <= n; i++){ for (j = 1; j <= n; j++){ scanf("%d", &pay[i][j]); } } for (i = 1; i <= m; i++){ for (j = 1; j <= n; j++){ scanf("%d", &incomes[i][j]); } } memset(maxIcomesEveryDayAndCity, -128, sizeof(maxIcomesEveryDayAndCity)); maxIcomesEveryDayAndCity[0][1] = 0; flag = 0; for (i = 1; i <= m; i++){ flag = !flag; for (j = 1; j <= n; j++){ for (k = 1; k <= n; k++){ tmp = maxIcomesEveryDayAndCity[!flag][k] + incomes[i][j] - pay[k][j]; if (tmp > maxIcomesEveryDayAndCity[flag][j]){ maxIcomesEveryDayAndCity[flag][j] = tmp; } } } } maxIcomes = INT_MIN; for (i = 1; i <= n; i++){ if (maxIcomesEveryDayAndCity[flag][i] > maxIcomes){ maxIcomes = maxIcomesEveryDayAndCity[flag][i]; } } printf("%d\n", maxIcomes); } return 0; }C++ :
#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; }
- 1
信息
- ID
- 4403
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者