HDOJ-1978 How many ways

2905 단어
참고: 끝점 선택은 경로 선택을 나타냅니다.
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>

using namespace std;

int dp[105][105];
int main()
{
    //freopen("in.txt", "r", stdin);
    int t;

    cin >> t;
    while(t--)
    {
        memset(dp, 0, sizeof(dp));
        int n, m;
        cin >> n >> m;
        dp[0][0] = 1;
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
        {
            int p;

            cin >> p;
            for(int h1 = 0; h1 <= p; h1++)
            {
                for(int h2 = 0; h2 <= p - h1; h2++)
                {
                    if(h1 == 0 && h2 == 0)
                        continue;
                    int s1 = i + h1;
                    int s2 = j + h2;
                    if(s1 < n && s2 < m)
                    {
                       dp[s1][s2] = (dp[i][j] + dp[s1][s2]) % 10000;
                    }
                }
            }
        }
        cout << dp[n-1][m-1] << endl;
    }
    return 0;
}

좋은 웹페이지 즐겨찾기