题意:一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子上的数必须比上一个走的格子的数大,问最大的路径和。

我一开始的思路是,或许是普通的最大路径和,只是多了可以一次走k个格子这个条件而已,终于能够水过了呢!

紧接着我发现,不止能向左和下走,还可以往回走!这就不能用 for(i=0;i<n;i++)  for(j=0;j<n;j++) 这样的两个循环 dp 掉整个图了,因为当我更新完后面的点可能又会走回来。

并想不到 DFS 的我想到了我是否可以把所有点按数的大小排序,按顺序 dp 就不会有往回去的问题了,而且我还担心如果一开始给的第一个点要是本来就很大,那有可能后面给的点比它小那我就连读都不用读它了我好机制!后来才知道我简直蠢成马对的就是这样,如我所料的TLE了```

看了题解的我眼泪掉下来```DFS+DP还是写题解的巨巨们玩的溜啊,我显然没有想过这么优质的做法```DFS里对每一条可能的路径都会遍历一遍,用 if ( ! dp [x] [y] ) 避免了一些重复判断的情况,在跑 DFS 的过程中连我那机制的读取数据都省了,能给我留点面子嘛```记忆化搜索毕竟还是比我溜很多的

后来问了学长这题还有没有其他的解法,学长表示,可以预处理出可能的路径,通过两点之间横竖距离小于等于 k 个格子以及数的递增建立一个有向图,然后用 DAG 做,但是由于本来就给了一个有距离关系的图,又重新做一个图显然会慢,学长还是比我机智几个档次的~

就这样,又学了一个记忆化搜索~

 #include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
using namespace std;
int dp[][],a[][],k,n; int xx[]={,-,,};
int yy[]={,,,-}; int dfs(int x,int y){
int ans=,m=;
if(!dp[x][y]){
for(int i=;i<=k;i++){
for(int j=;j<=;j++){
int dx=x+i*xx[j],dy=y+i*yy[j];
if(dx>=&&dx<n&&dy>=&&dy<n&&a[dx][dy]>a[x][y]){
m=max(m,dfs(dx,dy));
}
}
}
dp[x][y]=m+a[x][y];
}
return dp[x][y];
} int main(){
while(scanf("%d%d",&n,&k)!=EOF&&(n!=-||k!=-)){
memset(dp,,sizeof(dp));
int i,j;
for(i=;i<n;i++){
for(j=;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int ans=dfs(,);
printf("%d\n",ans);
}
return ;
}

hdu1078  记忆化搜索(DP+DFS)的更多相关文章

  1. 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence

    题目传送门 /* 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 dp[x][x] = 1 一定要加一个括号:dp[x][y] = 0, x > y; 当 ...

  2. hdu1331&&hdu1579记忆化搜索(DP+DFS)

    这两题是一模一样的``` 题意:给了一系列递推关系,但是由于这些递推很复杂,所以递推起来要花费很长的时间,所以我要编程序在有限的时间内输出答案. w(a, b, c): 如果a,b,c中有一个值小于等 ...

  3. hdu1078 记忆化搜索

    /* hdu 1078 QAQ记忆化搜索 其实还是搜索..因为里面开了一个数组这样可以省时间 (dp[x][y]大于0就不用算了直接返回值) */ #include<stdio.h> #i ...

  4. hdu1428漫步校园( 最短路+BFS(优先队列)+记忆化搜索(DFS))

    Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校园呈方形布 ...

  5. HDU 1078 FatMouse and Cheese 记忆化搜索DP

    直接爆搜肯定超时,除非你加了某种凡人不能想出来的剪枝...555 因为老鼠的路径上的点满足是递增的,所以满足一定的拓补关系,可以利用动态规划求解 但是复杂的拓补关系无法简单的用循环实现,所以直接采取记 ...

  6. 【10.31校内测试】【组合数学】【记忆化搜索/DP】【多起点多终点二进制拆位Spfa】

    Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long usin ...

  7. HDU - 6415 多校9 Rikka with Nash Equilibrium(纳什均衡+记忆化搜索/dp)

    Rikka with Nash Equilibrium Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K ...

  8. 记忆化搜索 dp学习~2

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1331 Function Run Fun Time Limit: 2000/1000 MS (Java/ ...

  9. BZOJ1048:[HAOI2007]分割矩阵(记忆化搜索DP)

    Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个), 这样分割了(n-1)次后,原矩阵被分割成 ...

  10. HDU1078记忆化搜索

    FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

随机推荐

  1. Spring学习笔记之整合hibernate

    1.web.xml里边要配置好对应的springxml的路径 <context-param> <param-name>contextConfigLocation</par ...

  2. shell指令expr和test指令

    通过expr指令可以进行+.-.*.\.%等运算,但是有一点值得注意,使用乘法时,要在*前加上一个\符号. 通过test指令可以进行逻辑测试,进行测试的情况有四种: 1.整数测试 a.判断两个整数是否 ...

  3. [pjsip]Pjlib中配置文件config.h解析

    config_site.h 这个头文件包含在config.h中,用于引入平台?(site)/用户特定的配置以控制PJLIB的特性,用户需要自己生成这个文件. 譬如说我们要把PJLIB编译成DLL,那么 ...

  4. 移动设备和SharePoint 2013 - 第4部分:定位

    博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和 ...

  5. hadoop启动jobhistoryserver

    hadoop启动jobhistoryserver来实现web查看作业的历史运行情况,由于在启动hdfs和Yarn进程之后,jobhistoryserver进程并没有启动,需要手动启动,启动的方法是通过 ...

  6. treap模版代码

    treap模版暂存. 以后修改整理. #include<cstdio> #include<iostream> #include <time.h> #include& ...

  7. UIViewController添加子控制器(addChildViewController)

    // //  TaskHallViewController.m //  yybjproject // //  Created by bingjun on 15/10/27. //  Copyright ...

  8. 数组Mex

    题目描述 请设计一个高效算法,查找数组中未出现的最小正整数. 给定一个整数数组A和数组的大小n,请返回数组中未出现的最小正整数.保证数组大小小于等于500. 测试样例: [-1,2,3,4],4 返回 ...

  9. linux命令:cd

    1.介绍: cd可以说是linux下最基本的命令,全称是change directory. 2.命令格式: cd [DIRECTORY] 3.命令功能: 切换到指定目录 4.常用范例: 例一:切换到根 ...

  10. 在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结

    在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结 一.资料来源:    网上一共找到两个方法,一个是视频上的教程,一个是网页资料. 二.视频资料方法内容:1.install qe ...