寒假练习 1016 滑雪
2013-04-01 22:40
253 查看
题目大意就是说给定一个矩阵,里面的值代表这点的高度,要求只能从高处滑到低处。问最远能划多远。
简单的DP,是poj的一道题。
简单的DP,是poj的一道题。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define maxn 106 #define inf 9999999 #define up i-1,j,map[i][j] #define down i+1,j,map[i][j] #define left i,j-1,map[i][j] #define right i,j+1,map[i][j] //动态转移方程: //dp[i][j] = 1+max(dp[i-1][j],dp[i+1][j],dp[i][j-1],dp[i][j+1]) int map[maxn][maxn]; int dp[maxn][maxn]; void init() { memset(map,-1,sizeof(map)); memset(dp,-1,sizeof(dp)); } int maxmap(int a1,int a2,int a3,int a4) //求4各值中的最大值 { if(a1 < a2) a1 = a2; if(a1 < a3) a1 = a3; if(a1 < a4) a1 = a4; return a1; } int dpsum(int i,int j,int h) { //排除边界或者非递增情况 if(map[i][j]==-1 || h <= map[i][j]) return 0; if(dp[i][j] >= 0) return dp[i][j];//这个点以前已经求过 dp[i][j] = maxmap(dpsum(up),dpsum(down),dpsum(left),dpsum(right))+1; return dp[i][j]; } int main() { int R,C; while(~scanf("%d%d",&R,&C)) { init(); for(int i = 1;i<=R;i++) for(int j = 1;j<=C;j++) scanf("%d",&map[i][j]); int maxans = 0; for(int i=1;i<=R;i++) { for(int j=1;j<=C;j++) { int len = dpsum(i,j,map[i][j]+1); if(maxans < len) maxans = len; } } printf("%d\n",maxans); } return 0; }
相关文章推荐
- 2013寒假练习 1016:滑雪
- 寒假训练--字符串--串结构练习——字符串匹配
- SDUT_2015寒假集训_结构体练习_E-小泉的难题
- 2018年全国多校算法寒假训练营练习比赛(第一场)
- 2018年全国多校算法寒假训练营练习比赛(第一场)-A大吉大利,今晚吃鸡——枪械篇
- 2013寒假练习 1012:导弹防御问题
- 2018年全国多校算法寒假训练营练习比赛(第二场) F 德玛西亚万岁(状态压缩DP 未解决)
- 2013 寒假练习 1048 n以内约数最多的数
- BIT寒假练习-2013__1007:Number Converter
- 2018年全国多校算法寒假训练营练习比赛(第二场)taotao要吃鸡
- L - Charm Bracelet 寒假练习2-L
- 2018年全国多校算法寒假训练营练习比赛(第三场)题解
- 2018年全国多校算法寒假训练营练习比赛(第三场)---A---题(斯特灵公式)
- 2018年全国多校算法寒假训练营练习比赛(第三场)题解
- 2018年全国多校算法寒假训练营练习比赛(第一场) - D - N阶汉诺塔变形(模拟)
- 寒假练习 1001 Average Numbers
- 2018年全国多校算法寒假训练营练习比赛(第一场)最强的决斗者一切都是必然的!
- 2018年全国多校算法寒假训练营练习比赛(第四场)F-Call to your teacher(dfs)
- 2018年全国多校算法寒假训练营练习比赛(第四场) - E - 通知小弟(BFS)
- 2018年全国多校算法寒假训练营练习比赛(第五场)G-送分啦-QAQ(博弈)