[洛谷]P3956 棋盘

洛谷—P3956 棋盘题解 题目:P3956 棋盘 题目思路: 求花费最小金币数,需要用BFS(当然DFS也可以)。我们将到达下一个格子的各个状态全部压入队列中。但注意这句话: 但这个魔法不能连续使用, 而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,走到了这个暂时有颜色的格子上,你就不能继续使用魔法。 这意味着我们需要在创建结构体时要多加上一个属性判断它是否在上一个格子用过了魔法。 代码: #include<iostream> #include<algorithm> #include<q 阅读详情

思路 : 这类棋盘搜索类问题, 初看起来, 感觉条件很多.状态转移无从下手. 我们可以把条件作为当前状态的一个属性.在每次DFS的时候把当前的这些状态的属性值作为参数传入进来.

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 105;
int a[N][N], f[N][N];
int n, m;
int dx[4] = {0, -1, 0, 1};
int dy[4] = {-1, 0, 1, 0};
int ans = 0x3f3f3f3f;
void dfs(int x, int y , int sum, bool flag) {

    if( 1 > x || 1 > y || x > n || y > n ) {
        return ;
    }
    if( f[x][y] <= sum ) {
        return ;
    }
    f[x][y] = sum;
    if(x == n && y == n) {
        ans = min(ans, sum);
        return ;
    }

    for(int i = 0 ; i < 4; i++) {
        int xx = x + dx[i];
        int yy = y + dy[i];
        if( a[xx][yy] ){
            if( a[x][y] == a[xx][yy]) {
                dfs(xx, yy, sum, false);
            } else {
                dfs(xx, yy, sum + 1, false);
            }
        } else if (!flag) {
            a[xx][yy] = a[x][y];
            dfs(xx, yy, sum + 2, true);
            a[xx][yy] = 0;
        }
    }

}
int main() {
    cin >> n >> m;
    memset(f, 0x3f, sizeof(f));
    for(int i = 1; i <= m ; i++) {
        int x, y, c;
        scanf("%d%d%d", &x, &y, &c);
        a[x][y] = c + 1;
    }

    dfs(1, 1, 0, false);

    printf("%d", (ans == 0x3f3f3f3f) ? -1 : ans);
    return 0;
}

 

洛谷P3956 [NOIP2017 普及组] 棋盘 题解+AC代码 阅读详情

相关推荐

保姆级教程:用COMSOL LiveLink™ for MATLAB 玩转自定义PDE,从理论到仿真一条龙

本文详细介绍了如何利用COMSOL LiveLink™ for MATLAB实现自定义PDE的从理论到仿真的完整流程。通过PDE模块与MATLAB的无缝集成,用户可以灵活处理非标准偏微分方程,适用于材料建模、传热传质验证等多物理场耦合研究。教程涵盖环境配置、方程标准化、界面操作及高级应用技巧,为工程仿真研究者提供原子级控制方案。

weixin_34098209的博客 354

洛谷 P3956 [NOIP2017 普及组] 棋盘

最近刚学到DFS,BFS,所以写一下题解,加深一下印象,奥利给!!!

2301_77514510的博客 499

SoC芯片时钟树优化实战:如何用分段CTS解决DDRPHY与Memory Controller的时序难题

本文深入探讨了SoC芯片时钟树优化中的分段CTS技术,重点解决DDRPHY与Memory Controller之间的时序难题。通过分析多域时钟架构的复杂性,提出三级分段CTS策略,并结合28nm移动SoC实战案例,展示如何通过Guide Buffer插入和本地段重构实现72%的跨域偏差改善。文章还涵盖5nm以下工艺的线阻变异、热梯度效应等特殊考量,为数字IC设计提供时钟树综合的高阶解决方案。

kkk56的博客 905

【题解】【洛谷P1548】【枚举】—— [NOIP1997 普及组] 棋盘问题

蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。直接枚举左上角和右下角两个点的坐标,统计就行。求出该棋盘中包含有多少个正方形、多少个长方形(不包括正方形)。一行两个整数,表示正方形的个数与长方形的个数。【蓝胖子编程教育简介】

Pantheraonca的博客 1415

生产实习-实习报告-Raspberry Pi的应用

生产实习-Raspberry Pi的应用 一.设计任务: 1、搭建树莓派开发环境 主要包括烧录树莓派操作系统,远程访问树莓派,树莓派接口配置以及树莓派与windows实现文件共享等。 2、树莓派的基本操作 控制GPIO点亮LED灯以及树莓派舵机云台控制 3、安装OpenCV及图像采集实验 OpenCV配合树莓派,直接读取来自树莓派摄像头Pi Camera的视频,进行人脸识别、边缘检测、颜色判别等各种计算机视觉开发。 4、树莓派小车远程Wi-Fi控制 使用树莓派驱动L298N,用树莓派板载Wi-Fi控制

青竹小轩的博客 750

《遥感大模型生产级实战:从数据到决策的端到端AI工程》系列第三部分:城市洪涝灾害应急响应与评估平台实战-文章 14:项目二启动与多源异构数据对齐

我们将系统性地梳理城市洪涝场景下的所有关键数据源,从天上的卫星(光学与SAR)、空中的无人机,到地面的物联网传感器和社交媒体信息流,深入剖析每种数据在洪涝响应中的独特价值、获取方式与内在局限性。本章的核心将是一个详尽的、生产级的数据对齐技术全景,我们将分步解决三大核心对齐难题:空间对齐(将所有数据投影到统一的地理坐标系)、时间对齐(处理不同采样频率的时间序列)以及最困难的语义对齐(将文本描述与物理观测相关联)。

panshengwu的博客 2003

洛谷p3956 棋盘

BFS

sanjiu46的博客 471

手把手教你为Multisim 14.0创建自定义元件:以SPICE模型导入为例

本文详细介绍了如何在Multisim 14.0中创建自定义元件,重点讲解了SPICE模型的导入与应用。通过系统性的步骤指南,包括元件符号设计、引脚定义、SPICE模型关联及验证测试,帮助工程师高效扩展元件库,满足特定设计需求。文章还提供了故障排除和性能优化的实用技巧,确保自定义元件在实际仿真中的可靠性。

weixin_42531163的博客 284

搜索?——P3956 [NOIP2017 普及组] 棋盘

2.对于没有颜色的格子,对于四个方向所有有颜色的格子都要先建条长度为2的边,再在四周有颜色格子之间两两建边,颜色相同就建长度为2的边,颜色不同就建长度为3的边,如下图所示一个没有颜色的格子四周格子的边。1.对于已经有颜色的格子,在扫描四个方向的格子对相同颜色的建条长度为0的边,不同颜色的建条长度为1的边。题目中n的范围是1~1000,实际最多也就1000个点,所以可以使用dijkstra,思路: 将棋盘的每一个格子看做一个点,建一个无向图用来跑最短路.建好边就可以跑spfa了,但是这个做法只有90分。

测试 1953

channel || channelGroup || ctx.writeAndFlush()发送字符串消息客户端接收不到的原因

一、原因 网络上传播的数据都是字节(二进制数据)类型。我们如果直接向网络流里面写入一个对象(如:String对象),是无法传输的。只有将对象序列化(转换为可以传输的字节类型)之后,才可以进行传输。所以问题的根源就很清楚了,需要把字符串转换成字节进行传输。、 二、解决办法 1、手动序列化 服务端: channelGroup.writeAndFlush(Unpooled.copiedBuffer("【客户端】"+remoteAddress+"已下线"+format.format(new Date()), Cha

haohaoxuexiyai的博客 4060

【WRF模拟】保存wrf输出文件到指定目录+仅输出指定空间域/变量文件

修改wrf命令以更改指定输出文件目录等

WW、forever的博客 544

洛谷 P3956 棋盘(记忆化DFS剪枝)

https://www.luogu.com.cn/problem/P3956 思路 直接搜会超时,保存到每个点的最优解,即记忆化,即可剪掉很多无用的分支。 代码 #include <bits/stdc++.h> using namespace std; const int M = 102; int mp[M][M]; int dis[M][M]; int vis[M][M]; int m, n, ans = -1; int dx[4] = {-1, 1, 0, 0}; int dy[4].

We have to be very hard to reach the top. 436

【即插即用模块】注意力篇 | TGRS 2025 | SPR:显著性比例协调,注意力聚焦,先抓差异再精准特征融合!

本文提出SPRMamba网络中的显著性比例协调模块(SPR),用于解决遥感变化检测中非显著变化区域的识别难题。该模块通过差异提取→显著性识别→比例融合的三步流程,动态平衡显著与非显著特征表示。SPR包含空间滤波(SF)和上下文记忆(CMM)两个子模块,分别基于统计特征和深度学习自动区分特征差异中的显著性成分。实验表明,SPR能有效抑制背景噪声干扰,提升边缘检测精度,且随着模块数量的增加,模型性能持续改善。该模块计算成本低,可直接嵌入双输入特征融合场景,适用于各类需要动态特征平衡的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 365

洛谷:P3956 棋盘(DFS)

题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上、 下、左、 右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费 1个金币。 另外, 你可以花费 2 个金币施展魔法让下一个无色格子暂时变为你指定的颜色。但这个魔法不能连续使用, 而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,走到了这个

Rrrrya 462

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【洛谷】P3956 [NOIP 2017 普及组] 棋盘 题解 【bfs】

本题采用的解法只能用优先队列,如果用普通队列,空间会不够用。优先队列每次取的队头都是最小的能量,一定程度上可以更快的找到答案,并且确保了最先找到(m,m)点的一定是最优解;普通队列,需要找出所有情况,从(m,m)点的所有值中取最小值,不能提前结束,必须等到队列为空。

hxkukuda的博客 1011

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

洛谷P3956 棋盘

题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上、 下、左、 右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费 1个金币。 另外, 你可以花费 2 个金币施展魔法让下一个无色格子暂时变为你指定的颜色。但这个魔法不能连续使用, 而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,走到了这个

ZHHABBBBB的博客 341

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

洛谷 P3956 棋盘 题解

记忆化深度优先搜索(MDFS) 宏观思路:我们从左上角一直走到右下角,dp[x][y]表示所有走到(x,y)这个格子的所有路中,所需代价最小的值。 for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) { g[i][j]=-1; //先把所有格子都置为-1 dp[i][j]=0x3f3f3f3f; //先赋一个很大的值 } for(int i=1;i<=n;i++) { int x,y,c; cin>&g

睡神的博客 588

洛谷_P3956 棋盘(尚贤)

【题目】:https://www.luogu.com.cn/problem/P3956 可以依稀看出这里用的是DFS。深搜过程中超出边界或大于最优解(即不可能更优,再走下去没有必要)的情况可以直接剪枝。由于每次更新都可能获得更优解,不判断是否走过。其中,f_{ij}f ij ​ 表示从 (1,1)(1,1) 走到 (i,j)(i,j) 的最少花费,最后输出 f_{mm}f mm ​ 。 注:...

广东省清远市博爱学校—尚贤的博客 339

【洛谷p3956】棋盘

日常blog(✧◡✧) 棋盘【题目链接】 算法: 然后这是2017普及组; first.关于颜色处理:让c[i][j]=color+1;这样无色=0,红色=1,黄色=2; 然后其实是记忆化,将记答案的数组先初始化为一个很大的数(我初始为了0x3f3f3f3f); second.dfs主体部分: 1.四个变量: x,y 存储搜索到的点的位置; num 存储当前花费 ...

weixin_30369087的博客 197

洛谷 P3956 棋盘

题目描述 有一个m ×m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上、 下、左、 右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费1个金币。 另外, 你可以花费2个金币施展魔法让下一...

dieyao5340的博客 309

洛谷 P3956 【棋盘】

JS省里冬令营夏令营讲深搜都讲到了 今天上午测试的题,15分,因为剪枝没剪干净,少了个等于号,于是本来能拿到的分也没拿到,唉 主要思想dfs+剪枝 #include<bits/stdc++.h> using namespace std; int m,n;//依照题目 int a[107][107];//存颜色 int vis[107][107];//存来到这个点最少花的金币 int d...

qq_42636949的博客 340

信息学奥赛一本通 1416:【17NOIP普及组】棋盘 | 洛谷 P3956 [NOIP2017 普及组] 棋盘

如果到(sx, sy)位置花的钱数coin比已知的一种到(sx, sy)位置的走法花钱mc[sx][sy]相等或更多,则没必要再搜索了,直接返回。在某次搜索时,当前位置为(sx, sy),下一个要访问的位置为(x, y),已经使用金币coin。如果当前位置(sx, sy)是无色的,但是变成了col色。那么下个位置(x, y)不可以是无色的。设二维数组mp记录每个格子的颜色,如果无色记为-1,1是黄色,0是红色。如果下个位置(x,y)是有色的,那么。如果当前位置(sx,sy)是有色的。

君义NOIP的博客 757

洛谷 P3956 棋盘 解题报告

P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上、 下、左、 右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费1个金币。 另外, 你可以花费2个金币施展魔法让...

weixin_30629653的博客 321
上一篇: [洛谷]P1890 gcd区间
下一篇: 【洛谷】P1031 [NOIP2002 提高组] 均分纸牌
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值