• hdu 1078(dfs记忆化搜索)


    题意:容易理解...

    思路:我开始是用dfs剪枝做的,968ms险过的,后来在网上学习了记忆化搜索=深搜形式+dp思想,时间复杂度大大降低,我个人理解,就是从某一个点出发,前面的点是由后面的点求出的,然后一直递归先求出后面的点,最后达到求解的效果。

    代码实现:

    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    using namespace std;
    int map[105][105],count[105][105];
    int n,k;
    int b[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
    int dfs(int x,int y)
    {
        int i,j,temp,max=-0,t1,t2;
        if(count[x][y]<0)
        {
            for(i=1;i<=k;i++)
            {
                for(j=0;j<4;j++)
                {
                   t1=x+b[j][0]*i;
                   t2=y+b[j][1]*i;
                   if(t1>=1&&t1<=n&&t2>=1&&t2<=n&&map[t1][t2]>map[x][y])
                   {
                       temp=dfs(t1,t2);
                       if(max<temp)
                           max=temp;
                   }
                }
            }
            count[x][y]=max+map[x][y];
        }
        return count[x][y];
    }
    int main()
    {
        int i,j;
        while(scanf("%d%d",&n,&k)!=EOF&&n!=-1||k!=-1)
        {
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                {
                    scanf("%d",&map[i][j]);
                    count[i][j]=-1;
                }
            printf("%d
    ",dfs(1,1));
        }
        return 0;
    }
  • 相关阅读:
    第一阶段冲刺总结
    读书笔记之梦断代码1
    第二次站立会议5
    第二次站立会议4
    第二次站立会议3
    第二次站立会议2
    Java学习
    项目冲刺第十天
    项目冲刺第九天
    项目冲刺第八天
  • 原文地址:https://www.cnblogs.com/jiangjing/p/3204706.html
Copyright © 2020-2023  润新知