大致题意:
问从图中的'.'到另一个'.',中间最多只能拐一个九十度的弯,最远的距离是多少
大致思路:
一开始用记忆化搜索感觉没有头绪。但是仔细思考后发现(以左侧为例)这个点左侧的点数是可以通过其左边的点递推得到的,于是直接用递推得到每个点各个方向上的点数。
推完之后遍历这个图,把每个点假设为拐点,得到所有点两个方向上和的最大值即为答案。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char mapp[104][104]; int dp[104][104][10]; int n; //012 //7*3 //654 bool inmap(int x,int y){ if(x>=0&&x<n&&y>=0&&y<n){ if(mapp[x][y]=='.')return 1; } return 0; } int main(){ int i,j,k; while(cin>>n&&n){ for(i=0;i<n;i++){ cin>>mapp[i]; } memset(dp,0,sizeof(dp)); for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(mapp[i][j]=='#')continue; if(inmap(i-1,j-1)){ dp[i][j][0]=dp[i-1][j-1][0]+1; } if(inmap(i-1,j)){ dp[i][j][1]=dp[i-1][j][1]+1; } if(inmap(i-1,j+1)){ dp[i][j][2]=dp[i-1][j+1][2]+1; } if(inmap(i,j-1)){ dp[i][j][7]=dp[i][j-1][7]+1; } } } //012 //7*3 //654 for(i=n-1;i>=0;i--){ for(j=n-1;j>=0;j--){ if(mapp[i][j]!='.')continue; if(inmap(i,j+1)){ dp[i][j][3]=dp[i][j+1][3]+1; } if(inmap(i+1,j+1)){ dp[i][j][4]=dp[i+1][j+1][4]+1; } if(inmap(i+1,j)){ dp[i][j][5]=dp[i+1][j][5]+1; } if(inmap(i+1,j-1)){ dp[i][j][6]=dp[i+1][j-1][6]+1; } } } int res=0; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(mapp[i][j]!='.')continue; for(k=0;k<=5;k++){ res=max(res,(dp[i][j][k]+dp[i][j][k+2]+1)); } res=max(res,(dp[i][j][0]+dp[i][j][6]+1)); res=max(res,(dp[i][j][1]+dp[i][j][7]+1)); } } printf("%d\n",res); } return 0; }
相关推荐
一些HDOJ上的DP题目的小总结,但愿能帮到那些想专攻DP的人吧
【标题解析】:“Humble Numbers 简单DP”这个标题指的是一个与“Humble Numbers”相关的编程问题,它可以通过动态规划(Dynamic Programming, DP)方法来解决。Humble Numbers,也称为卑微数,是一类特殊的自然数,...
- 定义状态dp[i]表示到达第i个位置的方案数。 - 根据题目条件建立状态转移方程。 - 使用滚动数组优化空间复杂度。 ##### 7. Climbing Worm (HDOJ1049) **知识点:** - 循环模拟。 - 简单数学计算。 **解题思路:**...
【标题】"hdu4405_HDOJ_ACM_" 指的是在杭州电子科技大学(HDU)的在线判题系统(Online Judge,简称OJ)上的一道编程竞赛题目,它属于HDOJ ACM系列。这个系列通常与国际大学生程序设计竞赛(ACM/ICPC)相关,这类...
在ACM题目中,常见的算法类型包括但不限于:排序与搜索(如快速排序、二分查找)、图论(如最短路径、拓扑排序)、动态规划(DP)、回溯法、贪心算法等。JAVA源码中可能会涉及到这些算法的具体实现,例如使用...
【HDOJ暑期多校联赛第三场】是2013年举办的一场面向广大编程爱好者的在线竞赛,由IOI(国际奥林匹克信息学竞赛)的冠军CLJ设计题目,旨在提升参赛者的信息学和算法解决能力。这次比赛涵盖了丰富的编程和算法知识点,...
动态规划(Dynamic Programming,简称DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相互重叠的子问题来求解复杂问题的方法。动态规划的主要思想是将一个问题分解成多个阶段,每个阶段都有一个...
在本项目中,"C#可视化连连看实现 广度优先,动态规划,回溯" 是一个使用C#编程语言实现的连连看游戏,它融合了三种算法:广度优先搜索(BFS)、动态规划(DP)和回溯法。这些算法在解决复杂问题时非常有效,尤其是...
HDOJ LeetCode 程序员面试金典 剑指OFFER PAT 甲级 乙级 ACWing 算法基础班 快排 归并 二分 高精度 前缀和差分 双指针 位运算 离散化 区间合并 单链表 双链表 栈 队列 单调栈 单调队列 KMP Tire 并查集 堆 哈希表 ...
然后通过动态规划(DP)方法,计算最少需要改变多少个碱基以避免匹配到任何致病片段。这里的关键是,失败指针的构建要考虑到即使在当前节点找不到匹配,也要尝试在失败链中寻找匹配。 总结,AC自动机是一种强大的...
12. HDU (HDOJ):杭州电子科技大学的在线评测系统。 推荐的使用策略: - POJ:北京大学的OJ,拥有数千道题目,适合专项训练。对于初学者,可以从AC率高的题目开始;有一定基础的OIer可以尝试每页40-50题;高手则应...
同时,文件还提到,具有ACM编程竞赛经验的考生在这种机试环节中会有一定的优势,建议考生在如九度在线编程平台(9DP)、北京大学在线编程平台(PKU JudgeOnline)和杭州电子科技大学在线编程平台(HDOJ)等平台上...