首页 > 其他分享 >洛谷 P1123 取数游戏(dfs)

洛谷 P1123 取数游戏(dfs)

时间:2022-09-07 17:36:03浏览次数:90  
标签:洛谷 LL dfs 取数 vis maxn P1123 sum

https://www.luogu.com.cn/problem/P1123

题目大意:给定一个n*m的矩阵,问我们从里面怎样取能取到最大的总和?

条件是选了一个数,下次它的八个方向上的数字就不能选了
输入 #1复制
3
4 4
67 75 63 10
29 29 92 14
21 68 71 56
8 67 91 25
2 3
87 70 85
10 3 17
3 3
1 1 1
1 99 1
1 1 1

输出 #1复制
271
172
99

注意这是多组输入
dfs模板题

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N=200200,M=2002;
const int INF=0x3f3f3f3f;
LL n,m;
LL sum,maxn=0;
LL a[M][M];
LL vis[M][M];
LL dx[]={-1,-1,-1,0,0,1,1,1},dy[]={1,0,-1,1,-1,1,0,-1};
void dfs(LL x,LL y)
{
    if(y==m+1)//当需要换下一行的时候,直接跳到下一行
    {
        dfs(x+1,1);
        return ;
    }
    if(x==n+1)//当都结束了的时候,直接对比一下最大值
    {
        maxn=max(maxn,sum);
        return ;
    }
    dfs(x,y+1);//默认选不起这个所以我们不选这个
    if(vis[x][y]==0)//瞥一眼发现可以选欸
    {
        sum+=a[x][y];//选出来
        for(LL i=0;i<8;i++)//标记一下四周已经不能再被选了
            ++vis[x+dx[i]][y+dy[i]];
        dfs(x,y+1);//接着往下寻找可选的地方

        for(LL i=0;i<8;i++)
            --vis[x+dx[i]][y+dy[i]];//状态回溯,没准别的地方才是我们真正需要的,所以需要状态回溯
        sum-=a[x][y];//总数相应减去
    }
}
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    cin>>T;
    while(T--)
    {
        maxn=0,sum=0;
        memset(a,0,sizeof a);
        memset(vis,0,sizeof vis);
        cin>>n>>m;
        for(LL i=1;i<=n;i++)
            for(LL j=1;j<=m;j++)
            cin>>a[i][j];
        dfs(1,1);//从第一行第一列开始从左往右,从上往下开始寻找
        cout<<maxn<<endl;
    }
    return 0;
}

标签:洛谷,LL,dfs,取数,vis,maxn,P1123,sum
From: https://www.cnblogs.com/Vivian-0918/p/16666609.html

相关文章

  • eolinker取数组数据合并成一个数据的方法
    有时候遇到数据存在某一个数组中,类似下图结构,而用到这些数据的接口又需要一个数据集合,比如这样”[14224,14223]"。  思路是创建一个集合,把这两项数据取出来来,然后放......
  • 洛谷P1262 间谍网络(tarjan求强连通分量+缩点)
    题目链接:https://www.luogu.com.cn/problem/P1262思路:首先,我们能够知道,入读为0的点如果不能被收买的话,那么此题是无解的。其次,如果图中存在环的话,那么环中每个点的......
  • 洛谷P2002 消息扩散(tarjan缩点)
    题目链接:https://www.luogu.com.cn/problem/P2002思路:由于图中每个强连通分量(scc)中的点是可以互相到达的,所以我们可以用tarjan求图中scc,然后将所有scc缩点,最后求缩点之......
  • 洛谷 P1036 [NOIP2002 普及组] 选数(dfs)
    https://www.luogu.com.cn/problem/P1036题目大意:从给定的n个数中选出m个求和,结果是一个素数的情况有多少种?输入43371219输出1这个题目的代码是根据Acwing中......
  • R语言中对数据框根据行名提取数据
     001、a<-4:1b<-1:4c<-letters[1:4]d<-LETTERS[1:4]dat<-rbind(a,b,c,d)dat##测试数据框idx<-c("c","b")......
  • 洛谷P1558 色板游戏 题解
    高考完后随机跳题的复建运动。看到区间覆盖操作考虑线段树。30种颜色?用位运算存储节省空间。因为在线段树上传合并时只需要考虑这一段是否存在该颜色,(即\(0\)或\(1\))具体......
  • 洛谷P1850 [NOIP2016 提高组] 换教室(期望dp)
    #include<bits/stdc++.h>usingnamespacestd;intn,m,v,e;intc[3005],d[3005];intf[305][305];doubledp[3005][3005][2];//dp[i][j][k]表示前i步申请更换了j......
  • Wireshark 无法抓取数据
    问题描述去(襄阳)采集机器人数据,第一次能正常获取数据。后面其它操作都没有数据反馈。 问题原因在公司采集机器人数据时。插上网线后,从"以太网"采集数据正常。后来,未关......
  • 洛谷P7907 [Ynoi2005] rmscne
    数据结构好题首先将询问离线,扫描线扫答案区间的左端点。设和\(l\)颜色相同的下一个位置为\(x\)。那么对于左端点\(\leql\),\(l\leq\)右端点$<x$的询问,\(l\)......
  • P1005 [NOIP2007 提高组] 矩阵取数游戏 题解
    luogu原题传送门[NOIP2007提高组]矩阵取数游戏题目描述帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(n\timesm\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非......