Language: C++

#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <cmath>

using namespace std;
typedef long long ll;

int N;
int field[6][6];
int ss[6];

ll calc(){
  ll sum=0;
  int nowField[6][6]={};
  for(int i=0;i<5;i++)
    for(int j=0;j<5;j++)
      nowField[i][j]=field[i][j];
  int bonus=1;
  while(1){
    bool isDel=false;
    int nxtField[5][5]={};
    // テァツ渉セテ・ツ慊ィテ」ツ?ョfieldテ」ツ?ォテ」ツ?ェテ」ツつ嘉」ツつ禿」ツ?ァテ」ツ??」ツつ凝」ツつづ」ツ?ョテ」ツつ津」ツ?凖」ツ?ケテ」ツ?ヲテヲツカツ暗」ツ??
    for(int i=0;i<5;i++){
      for(int j=0;j<5;j++){
        if(nowField[i][j]==-1)continue;
        // テヲツィツェ
        {
          int now=nowField[i][j];
          int cnt=0;
          for(int k=j;k<5;k++){
            if(now==nowField[i][k])cnt++;
            else break;
          }
          if(cnt>=3){
            isDel=true;
            for(int k=j;k<5;k++){
              if(now==nowField[i][k])nxtField[i][k]=-1;
              else break;
            }
          }
        }
        // テァツクツヲ
        {
          int now=nowField[i][j];
          int cnt=0;
          for(int k=i;k<5;k++){
            if(now==nowField[k][j])cnt++;
            else break;
          }
          if(cnt>=3){
            isDel=true;
            for(int k=i;k<5;k++){
              if(now==nowField[k][j]){
                nxtField[k][j]=-1;
              }
              else break;
            }
          }
        }
      }
    }
    for(int i=0;i<5;i++)
      for(int j=0;j<5;j++)
        if(nxtField[i][j]==-1)
          sum+=ss[nowField[i][j]]*bonus;
    for(int i=0;i<5;i++)
      for(int j=0;j<5;j++)
        if(nxtField[i][j]==-1)
          nowField[i][j]=-1;
    memset(nxtField,-1,sizeof(nxtField));
    // テヲツカツ暗」ツ?療」ツ?淌・ツセツ古」ツ??ィツ青ステ」ツ?ィテ」ツ?凖・ツ仰陛、ツスツ愿」ツつ津ィツ。ツ古」ツ??
    for(int j=0;j<5;j++){
      int lis[5];
      memset(lis,-1,sizeof(lis));
      int cnt=0;
      for(int i=4;i>=0;i--)
        if(nowField[i][j]!=-1)
          lis[cnt++]=nowField[i][j];
      for(int i=0;i<cnt;i++)
        nxtField[4-i][j]=lis[i];
    }
    for(int i=0;i<5;i++)
      for(int j=0;j<5;j++)
        nowField[i][j]=nxtField[i][j];
    if(!isDel)break;
    bonus++;
  }
  // if(sum==2724){
  //   cout<<bonus<<endl;
  //   for(int i=0;i<5;i++){
  //     for(int j=0;j<5;j++){
  //       printf("%2d",field[i][j]+1);
  //     }
  //     cout<<endl;
  //   }
  //   cout<<endl;
  //   for(int i=0;i<5;i++){
  //     for(int j=0;j<5;j++){
  //       printf("%2d",nowField[i][j]+1);
  //     }
  //     cout<<endl;
  //   }
  }
  return sum;
}

void dfs(int depth,int cy,int cx,ll &res){
  if(depth==N)res=max(res,calc());
  else{
    const int dy[]={-1,0,0,1};
    const int dx[]={0,-1,1,0};
    for(int i=0;i<4;i++){
      int ny=dy[i]+cy;
      int nx=dx[i]+cx;
      if(ny>=0&&nx>=0&&ny<5&&nx<5){
        swap(field[ny][nx],field[cy][cx]);
        dfs(depth+1,ny,nx,res);
        swap(field[ny][nx],field[cy][cx]);
      }
    }
  }
}

int main(){

  while(cin>>N&&N!=-1){
    for(int i=0;i<5;i++)
      for(int j=0;j<5;j++)
        cin>>field[i][j],field[i][j]--;
    for(int i=0;i<5;i++)
      cin>>ss[i];
    ll res=0;
    //cout<<N<<endl;
    for(int i=0;i<5;i++)
      for(int j=0;j<5;j++)
        dfs(0,i,j,res);
    cout<<res<<endl;
  }
  return 0;
}

Compiler output:
a.cc: In function 'll calc()':
a.cc:110:3: warning: no return statement in function returning non-void [-Wreturn-type]
  110 |   }
      |   ^
a.cc: At global scope:
a.cc:111:3: error: expected unqualified-id before 'return'
  111 |   return sum;
      |   ^~~~~~
a.cc:112:1: error: expected declaration before '}' token
  112 | }
      | ^