【记忆化搜索】[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,然而,这 ...
随机推荐
- RobotFramework:查询条件为最近一个月的数据(2019-07-09 00:00:00.000 到 2019-08-07 23:59:59.999)
自动化测试中遇到,默认查询条件为最近一个月,所以起始时间就应该为(2019-07-09 00:00:00.000 到 2019-08-07 23:59:59.999) test ${current_ ...
- C# 代码自动生成工具
开源:C# 代码自动生成工具,支持站点前后台 前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.co ...
- php类的继承(基本概念,访问权限修饰符,重写override)
类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 ...
- linux定时任务每隔5分钟向文本追加一行
编写shell脚本 test.sh内容如下,上传到linux的root目录 更改文件权限 chmod 777 test.sh 编辑定时任务 crontab -e */5 * * * ...
- Quartz.Net—基本操作
Quratz基本架构 Scheduler基本操作 /// <summary> /// 调度器信息 /// </summary> /// <returns></ ...
- 用Gson实现json与对象、list集合之间的相互转化
先写一个Person实体类,导入Gson包 String jsonData="{\"userid\":\"1881140130\"}";// ...
- Spring MVC <mvc:annotation-driven/>的作用
一.mvc:annotation-driven的作用 Spring 3.0.x中使用了mvc:annotation-driven后,默认会帮我们注册默认处理请求,参数和返回值的类,其中最主要的两个类: ...
- 八皇后问题——列出所有的解,可推至N皇后
<数据结构>--邓俊辉版本 读书笔记 今天学习了回溯法,有两道习题,一道N皇后,一道迷宫寻径.今天,先解决N皇后问题.由于笔者 擅长java,所以用java重现了八皇后问题. 注意是jav ...
- Python进阶:聊协程
从一个爬虫说起 Python 2 的时代使用生成器协程,Python 3.7 提供了新的基于 asyncio 和 async / await 的方法.先看一个简单的爬虫代码,爬虫的 scrawl_pa ...
- ArcGIS SOE开发异常之 ClassFactory cannot supply requested class
最近SOE开发一个功能,辛辛苦苦写完, 异常: ClassFactory cannot supply requested class 辛苦解决: 百度一下,描述这个问题的帖子很多,不过内容基本一致.大 ...