• Java实现 蓝桥杯 算法提高 最大值路径


    试题 算法提高 最大值路径

    资源限制
    时间限制:1.0s 内存限制:256.0MB
    问题描述
      刷微博,编程序。如下图所示,@北京发布 提出了如下“头脑震荡”问题。对此问题做一般化描述:
      有n阶方阵,从矩阵的左下角元素为起点,从行或列(水平或垂直)两个方向上移动,直到右上角。求出有多少条路径可以使得经过的元素累加值最大,最大值是多少。
    在这里插入图片描述
    输入格式
      共有n+1行。
      第一行整数n,表示矩阵的阶数,2<=n<=10。
      第二行起,每行n个整数,以空格分隔,共n行。。
    输出格式
      一行,两个空格分隔的数,第一个表示最大值路径的条数,第二个表示最大值。
    样例输入
    5
    4 5 4 5 6
    2 6 5 4 6
    2 6 6 5 2
    4 5 2 2 5
    5 2 5 6 4
    样例输出
    3 47

     
    
    import java.util.Scanner;
    
    public class 最大值路径 {
       static int m;
       //看看这条路走过没有
       static boolean [] [] visit ;
       //放地图
       static int [] []a;
       //值相同的路数     值
       static int k=0,f=0;
       //四个方向
       static int p[][]={{-1,0},{1,0},{0,-1},{0,1} };
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            m = sc.nextInt();
            a= new int[m][m];
            for (int i=0;i<m;i++){
                for (int j=0;j<m;j++){
                    a[i][j]=sc.nextInt();
                }
            }
            visit = new boolean[m][m];
            dfs(a,m-1,0,1,a[m-1][0]);
            System.out.println(k+" "+f);
        }
                            //  地图     x坐标  y坐标  想用路径的有多少条路     最大值元素累加
        public static void dfs(int a[][],int i,int j,int route,int sum){
            if(route>2*m-1)
                return ;
            if(visit[i][j]==true)
                return ;
            if(i==0&&j==m-1)
                if(route!=2*m-1)
                    return ;
            if(route==2*m-1)
            {
                if(i==0&&j==m-1)
                {
                    if(sum>f)
                    {
                        f=sum;
                        k=1;
                    }
                    else if(sum==f)
                        k++;
                }
                else
                    return ;
            }
    
            visit[i][j]=true;
            for(int t=0;t<4;t++)
            {
                int x,y;
                x=i+p[t][0];
                y=j+p[t][1];
                if(x>=0&&x<m&&y>=0&&y<m&&visit[x][y]==false)
                {
                    route++;
                    sum+=a[x][y];
    //			cout<<a[x][y]<<" ";
                    dfs(a,x,y,route,sum);
                    sum-=a[x][y];
                    visit[x][y]=false;
                    route--;
                }
            }
        }
    }
    
    
  • 相关阅读:
    13 Memcached 永久数据被踢现象
    PHP 学习内容
    12 Memcached 缓存无底洞现象
    Memcached 常用的方法
    PHP Memcached 面试题
    11 Memcached 缓存雪崩现象
    JQ报表插件
    (2.1)mysql升级与降级
    基于binlog恢复工具mysqlbinlog_flashback
    如何查看正在执行sql的语句及其父语句调用?如何查看正在执行SQL的具体参数值与执行计划?xml执行计划转为图形计划
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075797.html
Copyright © 2020-2023  润新知