列表

详情


NC53675. 「木」迷雾森林

描述

赛时提示:保证出发点和终点都是空地

帕秋莉掌握了一种木属性魔法
这种魔法可以生成一片森林(类似于迷阵),但一次实验时,帕秋莉不小心将自己困入了森林

帕秋莉处于地图的左下角,出口在地图右上角,她只能够向上或者向右行走

现在给你森林的地图,保证可以到达出口,请问有多少种不同的方案

答案对2333取模

输入描述

第一行两个整数m , n表示森林是m行n列
接下来m行,每行n个数,描述了地图
0 - 空地
1 - 树(无法通过)

输出描述

一个整数表示答案

示例1

输入:

3 3
0 1 0
0 0 0
0 0 0

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 664ms, 内存消耗: 70932K, 提交时间: 2023-08-13 13:36:48

#include<bits/stdc++.h>
using namespace std;
const int mod=2333;
int m,n,mapp[3005][3005],dp[3005][3005];
int main()
{
	scanf("%d%d",&m,&n);
	dp[m+1][1]=1;
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++)scanf("%d",&mapp[i][j]);
	for(int i=m;i>=1;i--){
		for(int j=1;j<=n;j++){
			if(mapp[i][j]==0)dp[i][j]=(dp[i+1][j]+dp[i][j-1])%mod;
		}
	}
	cout<<dp[1][n];
	return 0;
}

Java 解法, 执行用时: 1784ms, 内存消耗: 174316K, 提交时间: 2023-08-13 13:36:14

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt(), n = sc.nextInt();
		int[][] mp = new int[n][m],dp = new int[n][m];
        sc.nextLine();
		for (int i = 0; i < m; i++) 
			mp[i] = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

		for (int i = n-1; i >= 0; i--) {
			if(mp[i][0] == 1)
				break;
			dp[i][0] = 1;
		}
		for (int j = 1; j < n; j++) {
			if(mp[n-1][j] == 1)
				break;
			dp[n-1][j] = 1;
		}
		for (int i = n-2; i >= 0; i--) {
			for (int j = 1; j < n; j++) {
				if(mp[i][j] == 0){
					dp[i][j] += (dp[i+1][j]+dp[i][j-1])%2333;
				}
			}
		}
		System.out.println(dp[0][n-1]);
	}
}

上一题