1 条题解

  • 0
    @ 2025-9-10 9:15:09

    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
    上传者