蓝桥杯2020java c组省赛第八题

题目

在平面上有一些二维的点阵 这些点的编号就像二维数组的编号一样,从上到下依次为第1至第n行,从左到右依次为第1至第m行,每一个点可以用行号和列号来表示。 现在有个人站在第一行第一列,要走到第n行第m列。只能向右或者向下走。 注意:如果行号和列号都是偶数,不能走入这一格中。 问有多少种方案。

代码如下

package com.hzc.bluecap;



import java.util.Scanner;

public class BlueCap20208 {
	private static Integer m;
	private static Integer n;
	private static Integer sum;
	private static int[][] arr;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
			Scanner sc = new Scanner(System.in);
			 m=sc.nextInt();
			 n=sc.nextInt();
		    
		    arr=new int[m][n];
//		    for (int i = 1; i <=30; i++) {
//				for (int j = 1; j <= 30; j++) {
//					m=i;
//					n=j;
//					sum=0;
//					dfs(1,1);
//					System.out.print(sum+"\t");
//				}
//				System.out.println();
//			}
			dfs2();
			System.out.println(sum);
			System.out.println(arr[m-1][n-1]);
	}

	private static  void dfs(int i, int j) {
		// TODO Auto-generated method stub
		
		if(i>m||j>n) {
			return;
		}
		if(i%2==0&&j%2==0) {
			return;
		}
	
		if(i==m&&j==n) {
			sum++;
			return;
		}
		dfs(i+1,j);
		dfs(i,j+1);
		
	}
	public static void dfs2() {
		for(int i = 0;i<m;i++) {
			for(int j=0;j<n;j++) {
				if(i==0||j==0) {
					arr[i][j]=1;
				}else if(i%2==1&&j%2==1) {
					arr[i][j]=0;
				}else {
					arr[i][j]=arr[i-1][j]+arr[i][j-1];
				}	
			}
		}
	}
}

思路

1.看到每一步都只有两种走法想到递归的方法
2.用判断剔除特殊情况并终止,成功时sum++;

优化思路
1.输出符合条件的每一个结果寻找规律
2.发现arr[i][j]=arr[i-1][j]+arr[i][j-1],将其他特殊位置进行赋值
可得到arr[m-1][n-1](结果)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值