Untitled
unknown
plain_text
a year ago
2.2 kB
11
Indexable
#include <iostream>
using namespace std;
int n, m;
int arr[100][100];
int mt[20][20];
int dR[6] = {-1, -2, -1, 1, 2, 1};
int dC[6] = {-1, 0, 1, 1, 0, -1};
int visited[100][100];
int Max;
void BackTrack(int i, int j, int dem, int sum){
if(dem == 4){
Max = max(Max, sum);
return;
}
for(int k=0; k<6; k++){
int x = i + dR[k];
int y = j + dC[k];
if(x>=1 && x<=n && y>=1 && y<=m && visited[x][y] == 0 && arr[x][y] != 0){
visited[x][y] = 1;
BackTrack(x, y, dem + 1, sum + arr[x][y]);
visited[x][y] = 0;
}
}
}
void check(int i, int j){
int count1 = 0, count2 = 0;
int temp1 = -1, temp2 = -1;
int sum1 = arr[i][j], sum2 = arr[i][j];
for(int k=0; k<6; k++){
int x = i + dR[k];
int y = j + dC[k];
if(x>=1 && x<=n && y>=1 && y<=m){
if(k==0 || k==2 || k==4){
sum1 += arr[x][y];
temp1 = max(temp1, sum1);
count1++;
}
else if(k==1 || k==3 || k==5){
sum2 += arr[x][y];
temp2 = max(temp2, sum2);
count2++;
}
}
}
if(count1 == 3){
Max = max(Max, temp1);
}
if(count2 == 3){
Max = max(Max, temp2);
}
}
void reset(){
int n1 = 2*n;
int m1;
if(m%2==1)
m1 = 2*(m/2+1);
else
m1 = 2*(m/2);
for(int i=1; i<=n1; i++){
for(int j=1; j<=m1; j++){
arr[i][j] = 0;
}
}
}
void reset1(){
for(int i=1; i<=2 * n; i++){
for(int j=1; j<=m; j++){
visited[i][j] = 0;
}
}
}
int main(){
//freopen("vao.txt", "r", stdin);
int t;
cin >> t;
for(int tc=1; tc<=t; tc++){
cin >> m >> n;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
cin >> mt[i][j];
}
}
reset();
int indexx = 1;
for(int i=1; i<=n; i++){
int indexy = 1;
for(int j=1; j<=m; j++){
if(j%2==1){
arr[indexx][indexy++] = mt[i][j];
}else{
arr[indexx+1][indexy++] = mt[i][j];
}
}
indexx+=2;
}
n = 2*n;
if(m%2==1)
m = 2*(m/2+1);
else
m = 2*(m/2);
Max = -1;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(arr[i][j] != 0){
reset1();
visited[i][j] = 1;
BackTrack(i, j, 1, arr[i][j]);
check(i, j);
}
}
}
cout << "Case #" << tc << endl;
cout << Max * Max << endl;
}
return 0;
}Editor is loading...
Leave a Comment