暴力贪心求改进
查看原帖
暴力贪心求改进
945630
jjj0523楼主2023/3/16 08:19
#include<bits/stdc++.h>
using namespace std;
int t,n,m;
int a[7][7];
int ans;

void DFS(int x,int y)
{
    if(a[x][y]==0)
        return;
    //xy是当前的位置坐标
    ans=ans+a[x][y];
    a[x][y]=0;
    a[x-1][y-1]=0;
    a[x-1][y]=0;
    a[x-1][y+1]=0;
    a[x][y-1]=0;
    a[x][y+1]=0;
    a[x+1][y-1]=0;
    a[x+1][y]=0;
    a[x+1][y+1]=0;
    int maxi,maxj,maxa=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]>maxa)
            {
                maxi=i;
                maxj=j;
                maxa=a[i][j];
            }
        }
    DFS(maxi,maxj);//继续向次大的搜所
}

int main()
{
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        int maxi,maxj,maxa=-1;
        cin>>n>>m;
        fill(a[0],a[0]+7*7,0);
        for(int j=1;j<=n;j++)
            for(int k=1;k<=m;k++)
            {
                cin>>a[j][k];
                if(a[j][k]>maxa)
                {
                    maxa=a[j][k];
                    maxi=j;
                    maxj=k;
                }
            }
                //从矩阵里的最大值深搜
                ans=0;
                DFS(maxi,maxj);
                cout<<ans<<endl;
    }
    return 0;
}
2023/3/16 08:19
加载中...