您的位置:首页 > 其它

HDU 1978 How many ways

2016-07-07 14:29 344 查看

题目分析

一道简单的动态规划题目,首先状态可能是格子上的每个点了,状态转移方程肯定就是每个点可以到达的每个点了。但是数量很大,因此状态转移的每一步均要取模,同时初始化的时候我搞错了,并不是所有的地方都初始化为0,而是除了起点之外的其他点初始化为0,起点初始化为1.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 105;
const int MOD = 10000;
int maze[maxn][maxn];
int dp[maxn][maxn];
int T,n,m;

bool judge(int x,int y)
{
if(x < 1 || x > n || y < 1 || y > m)
return false;
return true;
}

int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
scanf("%d", &maze[i][j]);
memset(dp,0,sizeof(dp));
dp[1][1] = 1;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
for(int k = 0; k <= maze[i][j]; k++)
{
for(int kk = 0; kk <= maze[i][j]-k; kk++)
{
if(!k && !kk) continue;
if(judge(i+k, j+kk)) dp[i+k][j+kk] = (dp[i+k][j+kk] + dp[i][j])%MOD;
}
}
}
}

printf("%d\n", dp
[m]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: