日常blog(✧◡✧)

棋盘【题目链接】

算法:

然后这是2017普及组;


first.关于颜色处理:让c[i][j]=color+1;这样无色=0,红色=1,黄色=2;

然后其实是记忆化,将记答案的数组先初始化为一个很大的数(我初始为了0x3f3f3f3f);

second.dfs主体部分:

1.四个变量:

x,y 存储搜索到的点的位置;

num 存储当前花费

used 存储是否使用过魔法;

2.几个返回的边界

①.当走出地图时,return;

②.当前搜到的值不如之前搜到的优(也包括相同的情况,如果不加相同的情况,重复的会反复搜),return;

③.当搜到最右下(m,m)时,先判断当前搜到的值是否优于之前的值(其实我赶脚不用判断qwq啊亲测不用)因为如果当前值不够优早在②就会被return;

所以如果能递归进判断的,一定更优,那么直接更新就好了;

3.真.主体部分:

1.向四个方向搜索(介里也是很像广搜了)

如果拓展后的节点有颜色,那么判断拓展的节点与当前节点的颜色是否相同

相同的话,花费就不需要增加,直接dfs(xx,yy,num,0);

不同的话,花费需要加1,dfs(xx,yy,num+1,0);

如果拓展节点没有颜色,那么判断当前节点是不是使用过魔法的点,如果是使用过魔法的点,那么显然走不下去了,如果未使用过魔法,就使用巴啦啦能量,把拓展节点变成与当前节点相同的颜色,dfs(xx,yy,num+2,1);

最后不要忘记回溯:c[xx][yy]=0;

判断无解:

如果无解,ans的值就不会更新,为0x3f3f3f3f,如果dfs完,ans=0x3f3f3f3f,说明无解,否则有解,输出ans;

CODE:

#include<bits/stdc++.h>

using namespace std;

inline int read(){
int ans=;
char last=' ',ch=getchar();
while(ch>''||ch<'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=(ans<<)+(ans<<)+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int m,n;
int c[][],a[][];
int ans=0x3f3f3f3f;
int dx[]={,,-,,};
int dy[]={,,,,-}; void dfs(int x,int y,int num,int used){
if(x<||y<||y>m||x>m) return;
if(num>=a[x][y]) return;
a[x][y]=num;
if(x==m&&y==m){
ans=num;
return;
}
for(int i=;i<=;i++){
int xx=x+dx[i],yy=y+dy[i];
if(c[xx][yy]){//have color
if(c[xx][yy]==c[x][y]) dfs(xx,yy,num,);
else dfs(xx,yy,num+,);
}
else {
if(!used){
c[xx][yy]=c[x][y];
dfs(xx,yy,num+,);
c[xx][yy]=;
}
}
}
} int main(){
memset(a,,sizeof(a));
m=read();n=read();
int x,y,color;
for(int i=;i<=n;i++){
x=read();y=read();color=read();
c[x][y]=color+;//no color:0
//red color:1 yellow color:2
}
dfs(,,,);
if(ans==0x3f3f3f3f) printf("-1");
else printf("%d",ans);
return ;
}

end-

【洛谷p3956】棋盘的更多相关文章

  1. 2017普及组D1T3 洛谷P3956 棋盘

    2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...

  2. 洛谷 P3956 棋盘 解题报告

    P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能 ...

  3. 洛谷 P3956 棋盘(BFS)

    传送门:Problem P3956 https://www.cnblogs.com/violet-acmer/p/9827010.html 题解: BFS 相关变量解释: color[maxn][ma ...

  4. 洛谷 P3956 棋盘

    题目描述 有一个m ×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上 ...

  5. 洛谷 P3956 棋盘(记忆化搜索)

    嗯... 题目链接:https://www.luogu.org/problem/P3956 这是一道比较好搜的题,注意一些剪枝.预处理和魔法的处理问题(回溯). AC代码: #include<c ...

  6. 洛谷 P3956 棋盘 题解

    每日一题 day5 打卡 Analysis 深搜+剪枝+瞎jb判断 1.越界 2.这个点无色 3.当前的价值已经比答案大 三种情况要剪枝 我搜索里判断要不要施法的时候没判断上一次有没有施法,白调了0. ...

  7. 洛谷p3956 棋盘(NOIP2017 t3)

    在noip考场上本来以为只能骗暴力分,没想到最后A了: 本蒟蒻的做法比较简(zhi)单(zhang):记忆化深搜(考场上本来是想打广搜的,但我深搜稳一点就这样打了): 具体:每个点用一个f数组记录当前 ...

  8. 洛谷P1436 棋盘分割

    洛谷题目链接 动态规划: 我们设状态$f[i][j][o][p][k]$表示一个矩形,左上角顶点坐标为$(i,j)$,右下角顶点坐标为$(o,p)$时分割了$k$次,也就是说现在是$k+1$块 我们考 ...

  9. 洛谷 P1436 棋盘分割 解题报告

    P1436 棋盘分割 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共 ...

随机推荐

  1. mybatis查询出字段为null,但是sql查出来有值

    mybati 查出字段值为null, 然而相同的sql查出字段确实有值 原因: 在接受对象中使用了继承 :也就是说继承类与父类都定义了这个属性 ,字段重复,删除子类属性即可

  2. Linux中查看某 个软件的安装路径

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  3. bzoj2959: 长跑 LCT+并查集+边双联通

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2959 题解 调了半天,终于调完了. 显然题目要求是求出目前从 \(A\) 到 \(B\) 的可 ...

  4. [洛谷P4823] TJOI2013 拯救小矮人

    问题描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口. 对于每一个小矮人,我们知道他从 ...

  5. hdu 6206 : Apple 【计算几何 + 分数类】

    题目链接 比赛时C++上__float128都被卡精度,然后扔给队友用Java的BigDecimal过了 算法不多说,求三角形外心可以参考 维基百科 https://zh.wikipedia.org/ ...

  6. js加密php解密(CryptoJS)碰到的坑

    今天做了一个功能,需要js传密码到php文件,对js密码 进行判断,为想为这个传输过程进行解密,参考了网上的一个方法(这个方法我只是使用了,并没有太深了解0.0) 首先要引入3个js文件 (在网上可搜 ...

  7. php list()函数 语法

    php list()函数 语法 作用:用于在一次操作中给一组变量赋值.博智达 语法:list(var1,var2...) 参数: 参数 描述 var1 必需.第一个需要赋值的变量. var2,... ...

  8. 批量下载文件JSP

    最近项目有个需求,用户想对挂有附件的数据记录 实现一键下载全部附件(目前项目仅支持每次点击单条记录进行附件下载),下面记录我实现的解决方案.项目框架基于SSMservice业务实现层(impl):// ...

  9. Python_021(内置方法讲解二)

    一.内置方法二 1.__del__方法: a:构造方法:创建一个空间,  析构方法;释放一个空间; b:触发del的情况:Python解释器的垃圾回收机制,和遇到 del 对象名 c:析构方法的思想: ...

  10. HDU 1002 A - A + B Problem II (大数问题)

    原题代号:HDU 1002 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 原题描述: Problem Description I have a ...