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]); } }