HDU 1978 How many ways DP路径

来源:互联网 发布:手机上音乐截取软件 编辑:程序博客网 时间:2024/05/16 11:09

传送门:HDU 1978 How many ways

分析:
路径数目DP。
dp[x][y]代表x,y到终点的方案数

代码如下:

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define INF 0x3f3f3f3f#define ms(x, y) memset(x, y, sizeof(x))const double PI = acos(-1.0), eps = 1e-8;int map[101][101];int dp[101][101];int main() {    int cas,i,j,n,m,ii,jj;    scanf("%d",&cas);    while(cas--) {        scanf("%d%d",&n,&m);        ms(dp, 0);        dp[0][0] = 1;        for(i=0; i<n; i++) {            for(j=0; j<m; j++) {                scanf("%d",&map[i][j]);                if(map[i][j]==0) continue;  // 这也算是剪枝把  提高效率还是妥妥的                for(ii=i; ii<=i+map[i][j]&&ii<n; ii++) {                    for(jj=j; jj<=j+map[i][j]&&jj<m; jj++) {                        if(ii==i && jj==j) continue;                        if(ii-i+jj-j <= map[i][j])                            dp[ii][jj] = (dp[ii][jj] + dp[i][j]) % 10000;                    }                }                /*                for(ii=0; ii<=map[i][j]&&ii<n; ii++) {                    for(jj=0; jj<=map[i][j]-i&&jj<m; jj++) {                        if(ii==0 || jj==0) continue;                    }                }                */            }        }        printf("%d\n",dp[n-1][m-1]);    }    return 0;}
1 0
原创粉丝点击