【记忆化搜索】[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,然而,这 ...
随机推荐
- SecureCRT配色方案(转)
1. 设置背景颜色和字体颜色: 选项(Options)==>会话选项(Sessions options)==>终端(Terminal)==>仿真(Emulation) 选项(Opt ...
- UMl类图基本认识
1.基本认识 1) UML——Unified modeling language UML (统一建模语言), 是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果2) ...
- windows下安装JDK1.8和eclipse
JVM的执行过程: 加载.class文件->管理并分配内存->执行垃圾收集 1.JDK下载和安装 JDK是面向开发人员使用的SDK,提供了java的开发环境和运行环境,SDK是Softwa ...
- [一点感触]ADF4350 ADF4111混频记
几经周折,还是和jack顺利的调完了二者的混频,回想起来我发的上一个版本是2016-11-29,时间可能永远停留在这里了... 祝您一路走好,未来的世界不再忙碌.奔波! 发两张界面纪念吧: 也曾想着把 ...
- twemproxy配置
redis多主从,多节点,读写分离架构. nutcracker.yml的twemproxy配置 #redis_main是twemproxy所控制redis主从集群逻辑名称 redis_main: #t ...
- java jri null
java通过jri调用r文件,r文件必须和当前类在同一目录下,然后才能re.eval("source(fpath)")执行脚本;其中fpath为通过re.assign设置的文件全路 ...
- [转帖]年经贴: ARM将为苹果开发高性能CPU核心 取代笔记本x86处理器?
ARM将为苹果开发高性能CPU核心 取代笔记本x86处理器? https://www.cnbeta.com/articles/tech/899421.htm . 之前苹果的哥们说过 谁特别在意自己的软 ...
- EFCore 通过实体Model生成创建SQL Server数据库表脚本
在我们的项目中经常采用Model First这种方式先来设计数据库Model,然后通过Migration来生成数据库表结构,有些时候我们需要动态通过实体Model来创建数据库的表结构,特别是在创建像临 ...
- 【Qt开发】第一个Qt程序Hello World!
一:说在前头 我的第一份工作是做生产工具,当时用的MFC,IDE是VC6.0,现在想想真是古董级别,10年至今,微软也一直没有对MFC进行升级,冥冥中感觉微软自己都放弃MFC了,市场上貌似MFC的岗位 ...
- SOS dp
设$ans=\sum\limits_{A \cap B=\varnothing} f(A)g(B) $ 直接暴力枚举子集是$O(3^n)$, 一个技巧是先预处理出$h(S)=\sum\limits_{ ...