【深搜】 棋盘 【NOIp普及组 2017 第三题】 (luogu 3956/ssl 2851)
棋盘棋盘棋盘
题目大意:
有一个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)相关推荐
- 【动态规划】 摆花 【NOIp普及组 2012 第三题】 (ssl 2360/luogu 1077)
摆花摆花摆花 题目大意 有n种花,每种花有ai支,取m支,有多少种取法?(同一种花取第1,第3支和取第1,第2支算一种取法) 解题方法: 用f[i][j]来表示前i种选j支的方案数,然后往后推 动态转 ...
- CSP-J (NOIP普及组) 历年复赛真题考察内容(1998~2021)
TZOJ题目分类 本博客原文地址:https://www.cnblogs.com/BobHuang/p/14522022.html 其中,1.较简单题26题左右:2.动态规划17题,其中9题较好做:3 ...
- 【NOIP普及组2017】图书管理员Librarian
无聊的<图书管理员> 无聊的图书管理员 题目描述 分析-水题-水题-真的是水题 代码-不一定是正解 一些存疑的地方 END 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书, ...
- 2006 CCF NOIP普及组复赛 第1题:明明的随机数 <- 桶排序
[问题描述] 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数 ...
- 泽泽在巴西(jzoj普及组模拟第三题)(超难)
题目: 题目描述 泽泽帮助了英国某街道尽量减少酸雨的伤害,街道办主任非常感激他,就把他领到一扇门前,告诉他这扇门能通往好地方,具体好到什么程度要看泽泽人品.泽泽毫不犹豫地走了进去-- 泽泽来到了足球王 ...
- NOIP普及组历届真题(1997~2018)
供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...
- 历年CSP-J(NOIP普及组)分类汇总目录
内容持续更新中... ... [2022CSPJ普及组]T1.乘方 数学问题 [2022CSPJ普及组]T2.解密 数学问题 ...
- 纪中集训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 ...
- CSP-J复赛复习题目(NOIP普及组2000-2011)
CSP-J复赛复习题目(NOIP普及组2000-2011) NOIP普及组复赛(某个不存在的比赛)2000-2011年的题面和样例 可以用来复习CSP-J 建议去OJ上查看并提交 祝大家CSP RP+ ...
最新文章
- 通过maven命令将源代码编译成jar到本地仓库
- 文远知行A轮再获数千万美元融资 商汤科技和农银国际跟投
- C语言学习 - 字节对齐
- Nginx 301跳转踩坑总结
- 【java】Java异常处理总结
- % mysql 代表_MySQL中的星号(*)和百分号(%)代表表示什么,MySQL的库名、表名、字段名、字段值是否区分大...
- es6 --- Proxy的属性(get、set除外)
- C语言循环为1404的循环,考试,求大神帮忙,C语言,小弟感激不尽
- [vue] vue的:class和:style有几种表示方式?
- 【转】理解Azure订阅,账户,活动目录AD,租户等概念
- OpenCV+MFC显示图像
- ember.js mysql_Ember.js 入门指南——控制器(controller)
- 线性代数(一)矩阵和方程组
- 服务器gpu芯片排行,GPU云服务器排行榜
- 应用之星破除行业门槛 零成本开发手机应用
- photon 服务器操作系统,[专栏作家] Photon Server之Photon Control服务器控制界面
- 微信公众号JS屏蔽分享,复制链接等
- 【保姆级·创建对象】如何通过Supplier创建对象
- 上海工程技术大学计算机专硕,2019年上海工程技术大学硕士研究生调剂公告
- 27 Three.js的平行光THREE.DirectionalLight
热门文章
- linux安装rz命令_Linux 安装dep安装包命令
- c语言歌手预测成绩,5个裁判可以对10个歌手进行打分,计算各个歌手的最终得分排列...
- vuex保存用户信息_Vuex状态管理
- C++实现双栈结构(一个顺序表中使用两个栈)
- [汇编语言]实验:应用更灵活的寻址方式来定位内存地址
- [剑指offer]面试题35:第一个只出现一次的字符
- [蓝桥杯2019初赛]数的分解-枚举
- 操作系统习题——(习题二)
- 编程 音量键_盘点市面上那些千元级高逼格的键盘 灯光炫酷 多宏编程
- 杜教筛模板(P4213 【模板】杜教筛(Sum))