输出整个数组的和???求助

P1123 取数游戏

~~要不参考一下这个~~ ```cpp #include <bits/stdc++.h> using namespace std; int d[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,1,1,-1,-1,-1},s[8][8],q[8][8]; int t,n,m,ans,maxn=-1; void dfs(int x,int y){ if(y==m+1){ dfs(x+1,1); return ; } if(x==n+1){ maxn=max(ans,maxn); return ; } dfs(x,y+1); if(q[x][y]==0){ ans+=s[x][y]; for(int i=0;i<=7;i++){ q[x+d[i][0]][y+d[i][1]]++; } dfs(x,y+1); for(int i=0;i<=7;i++){ q[x+d[i][0]][y+d[i][1]]--; } ans-=s[x][y]; } } int main(){ cin>>t; while(t--){ ans=0; memset(s,0,sizeof(s)); memset(q,0,sizeof(q)); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>s[i][j]; } } dfs(1,1); cout<<maxn<<endl; maxn=-1; } return 0; } ```
by jumping @ 2023-09-13 23:30:15


@[sxshm](/user/719225) 我也错了,三个$\texttt{TLE}$
by INT_1024 @ 2023-09-14 20:22:44


对啊,T^T
by sxshm @ 2023-09-15 13:29:02


现在我改过了,代码如下 ```cpp #include<bits/stdc++.h> int t,n,m; int a[10][10]; int vis[10][10]; int dx[]={0,1,-1,0,1,1,-1,-1}; int dy[]={-1,0,0,1,-1,1,1,-1}; int mx,ans; void dfs(int x,int y){ if(y>m){ dfs(x+1,1); return ; } if(x>n){ mx=max(mx,ans); return ; } dfs(x,y+1); if(vis[x][y]==0){ ans+=a[x][y]; for(int i=0;i<8;i++) vis[x+dx[i]][y+dy[i]]++; dfs(x,y+1); for(int i=0;i<8;i++) vis[x+dx[i]][y+dy[i]]--; ans-=a[x][y]; } } int main(){ scanf("%d",&t); while(t--){ mx=ans=0; memset(a,0,sizeof a); memset(vis,false,sizeof vis); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); dfs(1,1); printf("%d\n",mx); } return 0; }//不要抄代码,不然有意想不到的结果 ```
by sxshm @ 2023-09-15 13:32:14


|