问题陈述:
为您提供了N * M的矩阵,其中包含整数值A [i] [j]。您的任务是从每一行中精确选择一个整数,以使这些整数的总和最大。将约束施加到所选的值。矩阵根据列数分为两等分(M为偶数)。
不允许在同一半中选择相邻行的两个整数值。因此,如果A [i] [j]属于前一半,则A [i + 1] [k]应该属于后一半。您的任务是确定可能的最大金额。
输入格式:
第一行:T代表测试用例的数量
对于每个测试用例:
第一行:两个以空格分隔的整数N和M
接下来的N行:A [i] [j]
输出格式:
对于每个测试用例,请打印一个整数,表示可能的最大和。
约束:
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;
}
}
我在这里做什么错了?
答案 0 :(得分:1)
因为您没有正确提到问题,所以从上面的测试案例中我所了解的 是这样:
总和= 15 + 14 + 11 + 5 = 45。 //参考
(使用以上参考)您必须在其他条件下再次分配 tmpMax = -9999 ,因为您必须从每一行中查找最大数量。