HDU1078 Fat Mouse and Chess

一个记忆化搜索的题目,参考了网上的代码才写出来的。
dfs(x,y)表示从x,y开始走的话最大的结果是多少。每一次搜索上下左右k步中 最大的那一个 还有一点dp的思想。dp数组用来记录结果,并且防止重复判断。

#include<iostream>
#include<cstring>

using namespace std;

const int maxn = 110;
int G[maxn][maxn];
int dp[maxn][maxn];
int dir[4][2]={0,1,0,-1,1,0,-1,0};//一个表示方向的数组
int n,k;
int dfs(int a,int b)
{
    int ans = 0;
    if(!dp[a][b])
    {
        for(int i = 1 ; i <= k ; i++)
        {
            for(int j = 0 ; j < 4 ; j++)
            {
                int x=a+dir[j][0]*i,y=b+dir[j][1]*i;//xy是要遍历的坐标
                if(x>=0&&x<n&&y>=0&&y<n)
                {
                    if(G[x][y]>G[a][b])
                    {

                        ans = max(ans,dfs(x,y));
                    }
                }
            }
        }
        dp[a][b]=ans+G[a][b];
    }
    return dp[a][b];

}
int main()
{
    while(cin>>n>>k&&!(n==-1&&k==-1))
    {
        memset(G,0,sizeof(G));
        memset(dp,0,sizeof(dp));
        for(int i = 0 ; i < n ; i++)
        {
            for(int j = 0; j < n ; j++)
            {
                cin >> G[i][j];
            }
        }
        dfs(0,0);
        cout<<dp[0][0]<<endl;
    }
    return 0;
}
全部评论

相关推荐

08-15 11:00
门头沟学院 Java
还没开始就结束了
码农索隆:是不是刚开始投的时候,心情还挺忐忑,还想着这要是给我发面试了,我应该怎么准备😼
点赞 评论 收藏
分享
08-16 00:44
已编辑
华南理工大学 Java
LazyBreeze:项目尽量体现你对技术的理解和深度,不是说把中间件用一下就完事了,你项目里面提到集群和分布式,你真在服务器上部署过吗,感觉太假了,第二个项目说自己用了微服务的什么组件,只是用了没有自己的思考,很难让面试官注意到你的简历。针对某几个技术点自己多思考一下,考虑一下有没有别的替代方案,可以写一下,即使没有真的实现
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务