Can the solution bellow be applied (with small modification) to the general case of N x N? (Solution in One Note).
BTW: use dark mode for better reading. 1816B - Grid Reconstruction
As you could ( maybe ) understand, my idea, use the fact that maximizing minimum cost path, is equivalent to maximizing all paths. Because if you maximize only a subset of paths, than is easy to show that minimum cost path changes.
Btw2: I did think about adding a "virtual" row and/or column to make matrix even by even, and saying that values of positions are 0, so the answer will (maybe?) not be affected.
link to problem: https://codeforces.net/problemset/problem/1816/B
Note: english is not my native langue, sorry for (maybe) poor comunication, i did my best.
culver0412 did i miss understand something in the general case?
int main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int grid[3][n+1];
int p_grid[3][n+1];
for(int j = 1; j <= n; j++){
p_grid[1][j] = n-(j-1);
p_grid[2][j] = n-(j-1);
}
p_grid[2][1] = p_grid[1][n] = 1;
p_grid[1][1] = p_grid[2][n] = n;
for(int j = 1; j <= n; ++j){
grid[1][j] = (j%2!=0? 2*n - j : j);
}
for(int j = 1; j <= n; ++j){
grid[2][j] = (j%2!=0? j : 2*n - j);
}
grid[2][n] = 2*n;
//using p_grid to get a better answer
for(int j = 1; j <= n-1; j++){
if( (p_grid[2][j] > p_grid[1][j+1]) ){
if( grid[2][j] > grid[1][j+1]){
int temp = grid[2][j];
grid[2][j] = grid[1][j+1];
grid[1][j+1] = temp;
}
}
}
for(int i = 1; i <= 2; i++){
for(int j = 1; j <= n; j++){
cout<<grid[i][j];
if(j != n) cout<<" ";
}
cout<<"\n";
}
}
return 0;
}