dfs
#include<stdio.h>
#include<windows.h>
int dig[][5]={{3,4,5,7,6},
{6,2,8,4,12},
{7,12,4,8,3},
{1,9,5,10,7},
{8,5,6,5,2},
};
int f[5][5];
int g[10];
int max=-1;
void dfs(int i,int j,int sum,int step){
if(sum<=24){
int z = 1;
for(int t = 0;t<step;t++)
z*=g[t];
if(z>max) max=z;
}else if(sum>24)return;
if(j+1<5&&!f[i][j+1]){
f[i][j+1]=1;
g[step] = dig[i][j+1];
dfs(i,j+1,sum+g[step],step+1);
g[step]=f[i][j+1]=0;
}
if(i+1<5&&!f[i+1][j]){
f[i+1][j]=1;
g[step] = dig[i+1][j];
dfs(i+1,j,sum+g[step],step+1);
g[step]=f[i+1][j]=0;
}
if(j-1>=0&&!f[i][j-1]){
f[i][j-1]=1;
g[step] = dig[i][j-1];
dfs(i,j-1,sum+g[step],step+1);
g[step]=f[i][j-1]=0;
}
}
int main(){
for(int i=0;i<5;i++){
for(int j = 0;j<5;j++){
f[i][j] = 1;
g[0] = dig[i][j];
dfs(i,j,g[0],1);
g[0]=f[i][j]=0;
}
}
printf("%d\n",max);
return 0;
}