棋盘棋盘棋盘





题目大意:

有一个M*M的棋盘,要从(1,1)到(m,m),中间有n个有颜色的格子,只能踩在有颜色的格子上,跳到不同颜色的格子要花费1元,可以将前方没颜色的格子变成自己要的格子,但要花费2元(走过去还要按上述规则花钱),走出变色出来的格子后,这个格子会变回无颜色,当棋盘上有变色出来的格子时,无法再变色,从(1,1)到(m,m)最少花多少钱?如果走不到,输出-1

解题方法:

这题我们可以用深搜,四个个数x,y,money,p,分别为行,列,用的钱,又没有变过色,在按照提议把每一种走法套进去,还要用一个a[i][j]来记录到(i,j)花费的钱最少是多少,当大于或等于这个数时退出,否则更新a

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int n,ans,m,a[110][110],color[110][110];
const int dx[4]={1,0,-1,0};//四个方向
const int dy[4]={0,1,0,-1};//四个方向
void dfs(int x,int y,int money,int p)
{int o;if ((x==n)&&(y==n))//看看是否到结果{ans=min(ans,money);//求最小的return;}if (a[x][y]<=money) return;//剪枝else a[x][y]=money;//替换if (money>ans) return;//剪枝for (int i=0;i<4;i++)if ((x+dx[i]>0)&&(x+dx[i]<=n)&&(y+dy[i]>0)&&(y+dy[i]<=n))//看看是否出界{if (color[x][y]==color[x+dx[i]][y+dy[i]])//颜色相同{o=color[x][y];//记录if (p) color[x][y]=0;//如果变过色,要变回去dfs(x+dx[i],y+dy[i],money,0);//用加moneycolor[x][y]=o;//再变回来}else if(color[x+dx[i]][y+dy[i]])//有颜色{o=color[x][y];//同上if (p) color[x][y]=0;dfs(x+dx[i],y+dy[i],money+1,0);//money+1color[x][y]=o;}else if(!p)//要没变过{color[x+dx[i]][y+dy[i]]=color[x][y];//不需要考虑变哪种,如果下一步给钱的反过来还是要给钱,不用给就不用给dfs(x+dx[i],y+dy[i],money+2,1);//money+2color[x+dx[i]][y+dy[i]]=0;//清零}}
}
int main()
{memset(a,127/3,sizeof(a));//因为要求最小的ans=a[0][0];//直接复制过去scanf("%d%d",&n,&m);int x,y,c;for (int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&c);color[x][y]=c+1;//要加1才能避免0的出现}dfs(1,1,0,0);if (ans==a[0][0]) ans=-1;printf("%d",ans);
}

【深搜】 棋盘 【NOIp普及组 2017 第三题】 (luogu 3956/ssl 2851)相关推荐

  1. 【动态规划】 摆花 【NOIp普及组 2012 第三题】 (ssl 2360/luogu 1077)

    摆花摆花摆花 题目大意 有n种花,每种花有ai支,取m支,有多少种取法?(同一种花取第1,第3支和取第1,第2支算一种取法) 解题方法: 用f[i][j]来表示前i种选j支的方案数,然后往后推 动态转 ...

  2. CSP-J (NOIP普及组) 历年复赛真题考察内容(1998~2021)

    TZOJ题目分类 本博客原文地址:https://www.cnblogs.com/BobHuang/p/14522022.html 其中,1.较简单题26题左右:2.动态规划17题,其中9题较好做:3 ...

  3. 【NOIP普及组2017】图书管理员Librarian

    无聊的<图书管理员> 无聊的图书管理员 题目描述 分析-水题-水题-真的是水题 代码-不一定是正解 一些存疑的地方 END 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书, ...

  4. 2006 CCF NOIP普及组复赛 第1题:明明的随机数 <- 桶排序

    [问题描述] 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数 ...

  5. 泽泽在巴西(jzoj普及组模拟第三题)(超难)

    题目: 题目描述 泽泽帮助了英国某街道尽量减少酸雨的伤害,街道办主任非常感激他,就把他领到一扇门前,告诉他这扇门能通往好地方,具体好到什么程度要看泽泽人品.泽泽毫不犹豫地走了进去-- 泽泽来到了足球王 ...

  6. NOIP普及组历届真题(1997~2018)

    供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...

  7. 历年CSP-J(NOIP普及组)分类汇总目录

    内容持续更新中... ... [2022CSPJ普及组]T1.乘方                    数学问题 [2022CSPJ普及组]T2.解密                    数学问题 ...

  8. 纪中集训2020.01.13【NOIP普及组】模拟赛C组总结————My First Time Write Summary

    纪中集训2020.01.13[NOIP普及组]模拟赛C组总结 题目编号 标题 0 [NOIP普及组模拟]取值( numbers.pas/cpp) 1 [NOIP普及组模拟]数对(pairs.pas/c ...

  9. CSP-J复赛复习题目(NOIP普及组2000-2011)

    CSP-J复赛复习题目(NOIP普及组2000-2011) NOIP普及组复赛(某个不存在的比赛)2000-2011年的题面和样例 可以用来复习CSP-J 建议去OJ上查看并提交 祝大家CSP RP+ ...

最新文章

  1. 通过maven命令将源代码编译成jar到本地仓库
  2. 文远知行A轮再获数千万美元融资 商汤科技和农银国际跟投
  3. C语言学习 - 字节对齐
  4. Nginx 301跳转踩坑总结
  5. 【java】Java异常处理总结
  6. % mysql 代表_MySQL中的星号(*)和百分号(%)代表表示什么,MySQL的库名、表名、字段名、字段值是否区分大...
  7. es6 --- Proxy的属性(get、set除外)
  8. C语言循环为1404的循环,考试,求大神帮忙,C语言,小弟感激不尽
  9. [vue] vue的:class和:style有几种表示方式?
  10. 【转】理解Azure订阅,账户,活动目录AD,租户等概念
  11. OpenCV+MFC显示图像
  12. ember.js mysql_Ember.js 入门指南——控制器(controller)
  13. 线性代数(一)矩阵和方程组
  14. 服务器gpu芯片排行,GPU云服务器排行榜
  15. 应用之星破除行业门槛 零成本开发手机应用
  16. photon 服务器操作系统,[专栏作家] Photon Server之Photon Control服务器控制界面
  17. 微信公众号JS屏蔽分享,复制链接等
  18. 【保姆级·创建对象】如何通过Supplier创建对象
  19. 上海工程技术大学计算机专硕,2019年上海工程技术大学硕士研究生调剂公告
  20. 27 Three.js的平行光THREE.DirectionalLight

热门文章

  1. linux安装rz命令_Linux 安装dep安装包命令
  2. c语言歌手预测成绩,5个裁判可以对10个歌手进行打分,计算各个歌手的最终得分排列...
  3. vuex保存用户信息_Vuex状态管理
  4. C++实现双栈结构(一个顺序表中使用两个栈)
  5. [汇编语言]实验:应用更灵活的寻址方式来定位内存地址
  6. [剑指offer]面试题35:第一个只出现一次的字符
  7. [蓝桥杯2019初赛]数的分解-枚举
  8. 操作系统习题——(习题二)
  9. 编程 音量键_盘点市面上那些千元级高逼格的键盘 灯光炫酷 多宏编程
  10. 杜教筛模板(P4213 【模板】杜教筛(Sum))