Codeforces 라운드 # 316 (사업부. 2) 상동 경로 (DP)

주제 링크

질문에서 주어진 문자 n * m의 매트릭스 (1, 1) 포인트로 이동하는 것으로 의도된다 (N, m) 캐릭터의 경로 내에 배치 될 시퀀스 내의 각 글자를 통해 지적한다. 이제 문자열이 원하는 상동 순서로 배열되어, 모듈로 1E9 + 7의 결과를 얼마나 많은 같은 경로를 요청합니다.

이 포기 처음부터 문제에 대한 공식 솔루션으로,이 기록 된 날씬한 감각 솔루션에 대한 질문은이 참을 수있는 정말 때문에, 그 문제는 알고하지 말끔하지 않습니다. 나는이 블로그가 많이 알고 읽어 보시기 바랍니다.

https://blog.csdn.net/u010660276/article/details/47700441

좋은 아이디어는 내가 이해에 약간의 장애를 추가,이 위대한 볼 수 있습니다. 두 점,하지만 인해 제한 단계로 가로 좌표를 유지하지만, 사실, 그렇지 않으면 왜 그렇게 재귀 위해 연대 분명있을 것입니다, 심지어 DP 종축이 의식이 명확해야 함께 생존 배열 함께 왜 별도의 답변을한다. 이 배열 생각하는 시간의 개념을 이해할 수있는 것은 DP의 좌표이며 재발이 분명 올 것이다. 또한, 코드 내부의 문제에이 솔루션의 재귀 부분은 어디 정말하지 않습니다 이해하는 곳은 주석을 무시할 수로, 인식의 문제를 코멘트.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mx = 550;
const int _n = 1e9 +7;
int n, m;
char s[mx][mx];
ll dp[2][mx][mx];//上一个状态or当前状态 从(1, 1)开始的点的横坐标 (n, m)开始的点的横坐标
inline ll add(ll a, ll b, ll c, ll d){
    return (a + b + c + d) % _n;
}
int main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        scanf("%s", s[i] + 1);
    }
    int cur = 0;
    dp[cur][1][n] = (s[1][1] == s[n][m]);
    for(int step = 1; step <= ((n + m - 2) >> 1); step++){
        int lst = cur;
        cur ^= 1;
        for(int x1 = 1; x1 <= n; x1++)
        for(int x2 = 1; x2 <= n; x2++){
            dp[cur][x1][x2] = 0;
        }
        for(int x1 = 1; x1 <= n && x1 <= 1 + step; x1++)
        for(int x2 = n; x2 >= 1 && x2 >= n - step; x2--){
            int y1 = 1 + step - (x1 - 1);
            int y2 = n - x2 + m - step;
            if(s[x1][y1] != s[x2][y2]) continue;
            dp[cur][x1][x2] = add(dp[lst][x1][x2], dp[lst][x1][x2+1],
                                  dp[lst][x1-1][x2], dp[lst][x1-1][x2+1]);
        }
    }
    ll ans = 0;
    for(int i = 1; i <= n; i++){
        ans += dp[cur][i][i];
        ans %= _n;
    }
    if((m + n) & 1){
        for(int i = 1; i <= n; i++){
            ans += dp[cur][i][i+1];
            ans %= _n;
        }
    }
    cout << ans << endl;
	return 0;
}
 
 
 

추천

출처blog.csdn.net/xuzonghao/article/details/88935947