hdoj1208_Pascal's Travels(dp)

来源:互联网 发布:语音播报软件 编辑:程序博客网 时间:2024/06/06 18:35

思路:记忆dp,注意数据类型

#include<iostream>#include<string.h>using namespace std;int input[50][50];long long table[50][50];long long dp(int x, int y, int n){    int rx = x - 9 > 0 ? x - 9 : 0;    int ry = y - 9 > 0 ? y - 9 : 0;    for (int i = x - 1; i >= rx; i--)    {        if (input[i][y] == x - i)        {            if (table[i][y] == -1)                table[i][y] = dp(i, y, n);            table[x][y] += table[i][y];        }    }    for (int j = y - 1; j >= ry; j--)    {        if (input[x][j] == y - j)        {            if (table[x][j] == -1)                table[x][j] = dp(x, j, n);            table[x][y] += table[x][j];        }    }    table[x][y]++;    return table[x][y];}int main(){    int n;    while (cin >> n&&n != -1)    {        for (int i = 0; i < n; i++)            for (int j = 0; j < n; j++)            {                char c;                cin >> c;                input[i][j] = c - '0';            }        memset(table, -1, sizeof(table));        table[0][0] = 1;        cout << dp(n - 1, n - 1, n) << endl;    }    return 0;}
0 0
原创粉丝点击