zoukankan      html  css  js  c++  java
  • 2019 ICPC NanJing C Digital Path

    C. Digital Path

    题意:

    给一个二维数组,问连续差值为1的序列数目

    当时比赛想的是 (BFS) , 还搞了个多源 (BFS)

    但是没有办法做到每个点只访问一次。

    其实这道题应该使用 (DFS) 进行回溯

    更新答案。

    思路:

    对于这个长度至少为4的处理,一开始还是处理的有些不妥。

    后来直接多开了一维记录长度,简单的一批。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    const int maxn = 1e3 + 10;
    int A[maxn][maxn];
    int vis[maxn][maxn];
    ll ans[maxn][maxn][5];
    
    
    const int dx[] = { 0,0,-1,1 };
    const int dy[] = { 1,-1,0,0 };
    
    const int mod = 1e9 + 7;
    
    int n, m;
    
    void dfs(int x, int y) {
    	vis[x][y] = 1;
    	int cnt = 0;
    	for (int i = 0; i < 4; i++) {
    		int nx = x + dx[i];
    		int ny = y + dy[i];
    		if (nx <= 0 || nx > n || ny <= 0 || ny > m)continue;
    		if (A[nx][ny] != A[x][y] + 1)continue;
    
    		cnt++;
    		if (!vis[nx][ny]) {
    			dfs(nx, ny);
    		}
    		ans[x][y][2] = (ans[nx][ny][1] + ans[x][y][2]) % mod;
    		ans[x][y][3] = (ans[nx][ny][2] + ans[x][y][3]) % mod;
    		ans[x][y][4] = (ans[nx][ny][3] + ans[x][y][4] + ans[nx][ny][4]) % mod;
    	}
    	if (!cnt) {
    		ans[x][y][1] = 1;
    	}
    }
    
    int main() {
    	scanf("%d%d", &n, &m);
    
    	for (int i = 1; i <= n; i++) {
    		for (int j = 1; j <= m; j++) {
    			scanf("%d", &A[i][j]);
    		}
    	}
    
    	for (int i = 1; i <= n; i++) {
    		for (int j = 1; j <= m; j++) {
    			if (!vis[i][j])dfs(i, j);
    		}
    	}
    
    	long long res = 0;
    
    	for (int i = 1; i <= n; i++) {
    		for (int j = 1; j <= m; j++) {
    			int f = 0;
    
    			for (int k = 0; k < 4; k++) {
    				int x = i + dx[k];
    				int y = j + dy[k];
    				if (x <= 0 || x > n || y <= 0 || y > m)continue;
    				if (A[x][y] == A[i][j] - 1) {
    					f = 1;
    					break;
    				}
    			}
    
    			if (!f) {
    				res = (res + ans[i][j][4]) % mod;
    			}
    		}
    	}
    
    	printf("%lld
    ", (res + mod) % mod);
    }
    

    心结了了。

  • 相关阅读:
    js高级教程阅读笔记 第一章-js的简介
    angular.element方法汇总
    AngularJS第六课(路由)
    AngularJS第五课(模块,动画,依赖注入)
    javascript基础整理(面试必备)
    Google工具page-speed使用教程(网站性能检测)
    常见前端面试题及答案
    css之布局那些事
    jquery之全屏滚动插件fullPage.js
    Git远程操作详解
  • 原文地址:https://www.cnblogs.com/sduwh/p/13693186.html
Copyright © 2011-2022 走看看