hdu 1078 动态规划

来源:互联网 发布:从零开始学java视频 编辑:程序博客网 时间:2024/05/18 20:12

记忆化搜索是什么东西???

#include<stdio.h>#include<stdlib.h>#include<string.h>#define maxn(a,b) a>b?a:bint path[101][101];int sum[101][101];int n,k;//定义当前点前进的方向(垂直方向还是水平方向)int l_r[4]={1,-1,0,0};//水平方向int u_d[4]={0,0,1,-1};//垂直方向//判断当前点是否越界int bound(int x,int y){if(x<0||x>=n||y<0||y>=n) return 0;elsereturn 1;}int dfs(int x,int y){int i,h;int c,r,number=0;if(sum[x][y])return sum[x][y];for(i=1;i<=k;i++){for(h=0;h<=3;h++){c = x + l_r[h]*i;r = y + u_d[h]*i;if(bound(c,r) && path[x][y]<path[c][r])number = maxn(number,dfs(c,r));}}return sum[x][y] = number + path[x][y];}int main(){int i,j;while(scanf("%d %d",&n,&k)!=EOF && n!=-1){for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&path[i][j]);memset(sum,0,sizeof(sum));printf("%d\n",dfs(0,0));}return 0;}



原创粉丝点击