• HDU-2571 命运(搜索,我才不是为了插图呢!哼!)



          看到这题其实感觉就是搜索题,广搜的话看讨论区里已经有人内存超限了,所以我选择了深搜,有两种思路,第一种是从起点出发,依次更新每一个格子的最大值,这样dp[n][m]就是最后的结果了,第二种是从起点试探到终点,回溯时带回最大值,这样dp[1][1]就是最大值了。

    思路1 187MS

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    
    using namespace std;
    const int N = 1000 + 5;
    const int INF = -(1<<30);
    int mat[25][N],dp[25][N],n,m;
    bool visit[25][N];
    
    void DFS(int x, int y, int sum){
        sum += mat[x][y];
        if(sum < dp[x][y]) return;
        if(sum > dp[x][y]) dp[x][y] = sum;
        if(x+1 <= n) DFS(x+1, y, sum);
        if(y+1 <= m) DFS(x, y+1, sum);
        for(int i=2; y*i <= m ;i++) DFS(x, y*i, sum);
    }
    
    void Init_mat(){
        for(int i=0;i<=n;i++)
            for(int j=0;j<=m;j++) visit[i][j] = false, dp[i][j] = INF;
    }
    
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            scanf("%d %d",&n,&m);
            Init_mat();
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++) scanf("%d",&mat[i][j]);
            DFS(1,1,0);
            printf("%d
    ",dp[n][m]);
        }
    }
     

     思路2 31MS

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    
    using namespace std;
    const int N = 1000 + 5;
    const int INF = -(1<<30);
    int mat[25][N],dp[25][N],n,m;
    bool visit[25][N];
    
    void DFS(int x, int y, int sum){
        sum += mat[x][y];
        if(sum < dp[x][y]) return;
        if(sum > dp[x][y]) dp[x][y] = sum;
        if(x+1 <= n) DFS(x+1, y, sum);
        if(y+1 <= m) DFS(x, y+1, sum);
        for(int i=2; y*i <= m ;i++) DFS(x, y*i, sum);
    }
    
    void Init_mat(){
        for(int i=0;i<=n;i++)
            for(int j=0;j<=m;j++) visit[i][j] = false, dp[i][j] = INF;
    }
    
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            scanf("%d %d",&n,&m);
            Init_mat();
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++) scanf("%d",&mat[i][j]);
            DFS(1,1,0);
            printf("%d
    ",dp[n][m]);
        }
    }
     
    其实这题还有个插图来着>_<,在这了

  • 相关阅读:
    努力
    散步
    相信自己
    我仅有的倔强
    存储过程 有用
    面试题整理 !=!=未看 *****面试题整理最全 有用
    项目介绍4 y有用
    面试题;40个多线程的问题 背1 有用
    面试题: redis面试题 有用 redis详细
    数据库相关内容 已看1 有用
  • 原文地址:https://www.cnblogs.com/Pretty9/p/7384040.html
Copyright © 2020-2023  润新知