hdu 1078 记忆化搜索

来源:互联网 发布:直销软件qdzxrj 编辑:程序博客网 时间:2024/05/18 00:46

点击打开链接

#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int M = 110;typedef struct{int x1;int y1;}Num;Num Move[4]={{-1,0},{1,0},{0,-1},{0,1}};int ans,n,k,g[M][M],dp[M][M]; //dp[i][j] 以(i,j)为起始点出发最大能吃多少 int dfs(int x,int y)  //终止条件:地图上最大的肯定能被算出来 {if(dp[x][y]){return dp[x][y];}int a,b,c,MAX=0;for(c=1;c<=k;c++){for(int i=0;i<4;i++){a=x+Move[i].x1*c;b=y+Move[i].y1*c; //走c步停下 if(a>=0&&a<n&&b>=0&&b<n&&g[a][b]>g[x][y]) {dfs(a,b);MAX=max(MAX,dp[a][b]);}}}dp[x][y]=g[x][y]+MAX;return dp[x][y];}int main(){int i,j;while(cin>>n>>k){ans=-1;memset(dp,0,sizeof(dp));if(n==-1&&k==-1){break;}else{for(i=0;i<n;i++){for(j=0;j<n;j++){cin>>g[i][j];}}cout<<dfs(0,0)<<endl;}}return 0;}


0 0