如何获得给定矩阵的最大和?

时间:2019-10-12 14:23:37

标签: c++ arrays vector

问题陈述:

为您提供了N * M的矩阵,其中包含整数值A [i] [j]。您的任务是从每一行中精确选择一个整数,以使这些整数的总和最大。将约束施加到所选的值。矩阵根据列数分为两等分(M为偶数)。

不允许在同一半中选择相邻行的两个整数值。因此,如果A [i] [j]属于前一半,则A [i + 1] [k]应该属于后一半。您的任务是确定可能的最大金额。

输入格式: 第一行:T代表测试用例的数量
对于每个测试用例:
    第一行:两个以空格分隔的整数N和M
    接下来的N行:A [i] [j]

表示的M个以空格分隔的整数

输出格式:
对于每个测试用例,请打印一个整数,表示可能的最大和。

约束:

1 < T < 100  
1 <= N, M <= 500, M is even  
1 <= A[i][j] <= 10^6  

样本输入:

1
4 4
10 15 2 5
20 4 14 12
10 11 10 2
2 3 4 5

样本输出:

45

我的代码:

int solve (vector<vector<int> > A){
    int maxSum1=0;
    for(int i=0;i<A.size();i++){
        int tmpMax=-9999;
        if(i%2==0){
            for(int j=0;j<A[i].size()/2;j++){
                if(A[i][j]>tmpMax){
                    tmpMax=A[i][j];
                }
            }
        }else{
            for(int j=A[i].size()/2;j<A[i].size();j++){
                if(A[i][j]>tmpMax){
                    tmpMax=A[i][j];
                }
            }
        }
        maxSum1+=tmpMax;
    }
    int maxSum2=0;
    for(int i=0;i<A.size();i++){
        int tmpMax=-9999;
        if(i%2!=0){
            for(int j=0;j<A[i].size()/2;j++){
                if(A[i][j]>tmpMax){
                    tmpMax=A[i][j];
                }
            }
        }else{
            for(int j=A[i].size()/2;j<A[i].size();j++){
                if(A[i][j]>tmpMax){
                    tmpMax=A[i][j];
                }
            }
        }
        maxSum2+=tmpMax;
    }
    if(maxSum1>maxSum2){
        return maxSum1;
    }
    else{
        return maxSum2;
    }
}

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

因为您没有正确提到问题,所以从上面的测试案例中我所了解的 是这样:

总和= 15 + 14 + 11 + 5 = 45。 //参考

(使用以上参考)您必须在其他条件下再次分配 tmpMax = -9999 ,因为您必须从每一行中查找最大数量。