hdu1978基础dp

来源:互联网 发布:淘宝绿森数码是正品吗 编辑:程序博客网 时间:2024/06/05 03:28
/*****************************************Author      :Crazy_AC(JamesQi)Time        :2015File Name   :思路:简单dp,从点(x,y)可以走到的点的表达式是(dx + x,dy + y) && x + y <= a[x][y] && x + dx <= n && y + dy <= m此时就可以进行状态的转移了dp[x + dx][y + dy] = (dp[x][y] + dp[x + dx][y + dy]) % 10000;最后的结果状态在dp[n][m]中;*****************************************/// #pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <algorithm>#include <iomanip>#include <sstream>#include <string>#include <stack>#include <queue>#include <deque>#include <vector>#include <map>#include <set>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <limits.h>using namespace std;#define MEM(a,b) memset(a,b,sizeof a)#define pk push_backtemplate<class T> inline T Get_Max(const T&a,const T&b){return a < b?b:a;}template<class T> inline T Get_Min(const T&a,const T&b){return a < b?a:b;}typedef long long ll;typedef pair<int,int> ii;const int inf = 1 << 30;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;int dp[110][110];int a[110][110];int main(){// ios::sync_with_stdio(false);// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);int n,m;int T;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",&a[i][j]);MEM(dp,0);dp[1][1] = 1;for (int i = 1;i <= n;++i){for (int j = 1;j <= m;++j){for (int dx = 0;dx <= a[i][j];dx++){if (i + dx > n) break;for (int dy = 0;dy + dx <= a[i][j];dy++){if (dx == 0 && dy == 0) continue;if (j + dy > m) break;dp[i + dx][j + dy] = (dp[i][j] + dp[i + dx][j + dy]) % 10000;}}}}cout << dp[n][m] << endl;}return 0;}


0 0
原创粉丝点击