HDU 1078 FatMouse and Chess(dp记忆化搜索)

来源:互联网 发布:怎么找淘宝女主播 编辑:程序博客网 时间:2024/05/15 18:12
////  main.cpp//  Richard////  Created by 邵金杰 on 16/9/15.//  Copyright © 2016年 邵金杰. All rights reserved.//#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=100+10;typedef long long ll;ll dp[maxn][maxn],s[maxn][maxn],vis[maxn][maxn];int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};int n,k;ll dfs(int x,int y){    if(dp[x][y]!=-1) return dp[x][y];    dp[x][y]=s[x][y];    vis[x][y]=1;    for(int i=0;i<4;i++)    {        for(int j=1;j<=k;j++)        {            int nx=x+dx[i]*j;            int ny=y+dy[i]*j;            if(nx<1||nx>n||ny<1||ny>n) continue;            if(s[nx][ny]<=s[x][y]) continue;            if(vis[nx][ny]) continue;            dp[x][y]=max(dp[x][y],dfs(nx,ny)+s[x][y]);        }    }    vis[x][y]=0;    return dp[x][y];}int main(){    while(scanf("%d%d",&n,&k))    {        memset(dp,-1,sizeof(dp));        memset(vis,0,sizeof(vis));        memset(s,0,sizeof(s));        if(n==-1&&k==-1) break;        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)                scanf("%lld",&s[i][j]);        cout<<dfs(1,1)<<endl;    }    return 0;}

0 0