【记忆化搜索】[NOIP-2017--普及组] -- 棋盘
分析:记忆化搜索, 用DP[i][j]表示走到(i,j)时的最小代价,如果当前深搜到的代价sum>=dp[i][j],直接return ; 否则更新dp[i][j]——表示这是一个更优的解,然后继续递归!与sum的判断,每一个if条件都不能省!
AC题解:
- int m,n; //和题意描述的相反,m表示有颜色的点数,n表示正方形的边长
- int G[N][N];//存贮每个格点的颜色情况!
- int ans;
- int dir[][]={ {-,},{,},{,-},{,} };
- int dp[N][N];//用DP[i][j]表示走到(i,j)时的最小代价
- void dfs(int x,int y,int sum,int op,int col){
- // printf("**(%d,%d) sum=%d op=%d col=%d\n",x,y,sum,op,col);
- if(x==n&&y==n){
- ans=min(ans,sum);
- // printf("________sum=%d\n",sum);
- return ;
- }
- for(int i=;i<;i++){
- int dx=x+dir[i][];
- int dy=y+dir[i][];
- if(dx<||dy<||dx>n||dy>n)
- continue;
- if(sum>=dp[dx][dy])//进行优化,dp[][]记忆之前达到该点的最小花费!
- continue ;
- if(G[dx][dy]>=){
- if(col==G[dx][dy]){//代价为零,同种颜色!
- dp[dx][dy]=sum;
- dfs(dx,dy,sum,,col);
- }
- else{ //代价为1,异种颜色,可以非一次!
- dp[dx][dy]=sum+;
- dfs(dx,dy,sum+,,!col);
- }
- }
- else{
- if(op==&&dp[dx][dy]>sum+ ){ //上面有条件:dp[dx][dy]>sum
- dp[dx][dy]=sum+;
- dfs(dx,dy,sum+,,col);//op改为1表示跳到空格上了,下一步要小心!
- }
- }
- }
- }
- int main(){
- // freopen("checkerboard.in","r",stdin);
- // freopen("checkerboard.out","w",stdout);
- int x,y,z;
- scanf("%d%d",&n,&m);
- memset(G,-,sizeof(G));
- for(int i=;i<=m;i++){
- scanf("%d%d%d",&x,&y,&z);
- G[x][y]=z;//0红色,1黄色
- }
- memset(vis,,sizeof(vis));
- ans=inf;
- memset(dp,inf,sizeof(dp));
- dp[][]=;
- dfs(,,,,G[][]);//省时需要记忆化搜索!!
- if(ans==inf){
- printf("-1\n");
- }
- else{
- printf("%d\n",ans);
- }
- return ;
- }
(点开有注释呦~~)
【记忆化搜索】[NOIP-2017--普及组] -- 棋盘的更多相关文章
- 【NOIP 2017 普及组】 跳房子
裸的单调队列优化dp+二分 我居然还调了挺久 日常审题错误 #include <bits/stdc++.h> using namespace std; typedef long long ...
- NOIP 2017 逛公园 记忆化搜索 最短路 好题
题目描述: 策策同学特别喜欢逛公园.公园可以看成一张N个点MM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. ...
- ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. Poor Ramzi -dp+记忆化搜索
ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. ...
- 【noip 2009】 乌龟棋 记忆化搜索&动规
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...
- poj1191 棋盘分割【区间DP】【记忆化搜索】
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16263 Accepted: 5812 Description ...
- POJ 1191 棋盘分割 【DFS记忆化搜索经典】
题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- 2017普及组D1T3 洛谷P3956 棋盘
2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...
- 最大联通子数组之和(dfs,记忆化搜索,状态压缩)
最大联通子数组,这次的题目,我采用的方法为dfs搜索,按照已经取到的数v[][],来进行搜索过程的状态转移,每次对v[][]中标记为1的所有元素依次取其相邻的未被标记为1的元素,将其标记为1,然而,这 ...
随机推荐
- linux中信号的API详解实例
/************************************************************************* > File Name: signal.c ...
- 用Python打开文件夹
用Python读取文件夹, 然后打开文件 下面读取到文件的每一个内容, 然后加上路径 import os path = r'../Downloads/text/content' for filenam ...
- Machine Learning Glossary
http://people.seas.harvard.edu/~mgelbart/glossary.html more at:http://www.metacademy.org/list
- go零碎总结
1.go里通过首字母大小写来区分它是私有的还是公有的,比如对于一个结构体属性一般就以大写开头(和Java不一样,不需要什么getter,setter方法):而对于方法而言,它是隶属于包(包名一定是小写 ...
- java 基础 HashMap 并发扩容问题
存入的数据过多的时候,尤其是需要扩容的时候,在并发情况下是很容易出现问题. resize函数: void resize(int newCapacity) { Entry[] oldTable = ta ...
- Spring之22:DefaultListableBeanFactory
1. DefaultListableBeanFactory的作用: 默认实现了ListableBeanFactory和BeanDefinitionRegistry接口,基于bean definitio ...
- Android中使用LitePal操控SQLite数据库
<第一行代码>读书手札 (一)什么是LitePal数据库 LitePal数据库是安卓的一个开源库,我们在以后的开发中,将会遇到许许多多的开源库,感谢开源社 区:因为开源社区的存在,一些我们 ...
- 解决idea中maven项目无法读取src/main/java目录下面的配置文件问题
解决idea中maven项目无法读取src/main/java目录下面的配置文件问题 当我们在maven项目中使用Mybatis的时候,需要给Mybatis配置核心xml文件(MyBatis-Conf ...
- docker 实践六:dockerfile 详解
本篇开始来学习关于 dockerfile 的知识. 注:环境为 CentOS7,docker 19.03. dockerfile 是⼀个⽂本格式的配置⽂件, ⽤户可以使⽤ dockerfile 来快速 ...
- Docker 学习笔记(四):问题日志
一.Docker-Compose 容器组开机重启失败 Docker-Compose 的 depends_on 参数在 docker 中没有对应. 重启电脑后,容器的重启过程只由 docker 控制,而 ...