这么搜有点太暴力了超时两个点有啥优化空间吗
查看原帖
这么搜有点太暴力了超时两个点有啥优化空间吗
1463377
mmmkkk111楼主2024/12/28 22:35

#include<bits/stdc++.h>
using namespace std;
int n,m;int ans;
int dx[]={0,0,1,-1,1,-1,1,-1,0};
int dy[]={1,-1,1,-1,-1,1,0,0,0};
int a[10][10];int mark[10][10];
void dfs(int sum){
ans=max(ans,sum);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!mark[i][j]){
for(int p=0;p<=8;p++)
if(i+dx[p]>=1&&i+dx[p]<=n&&j+dy[p]>=1&&j+dy[p]<=m)
mark[i+dx[p]][j+dy[p]]++;
dfs(sum+a[i][j]);
for(int p=0;p<=8;p++)
if(i+dx[p]>=1&&i+dx[p]<=n&&j+dy[p]>=1&&j+dy[p]<=m)
mark[i+dx[p]][j+dy[p]]--;
}
}
}
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
memset(mark,0,sizeof(mark));
ans=0;
dfs(0);
cout<<ans<<'\n';  
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;cin>>t;
while(t--)solve();
return 0;
}
2024/12/28 22:35
加载中...