POJ1992+简单DP

题意不难理解

dp[ i ][ j ] = dp[ i-1 ][ j ]+dp[ i ][ j-1 ];

View Code
 1 /*

 2 dp

 3 */

 4 #include<stdio.h>

 5 #include<string.h>

 6 const int maxn = 1005;

 7 int dp[ maxn ][ maxn ];

 8 int mat[ maxn ][ maxn ];

 9 int main(){

10     int ca;

11     scanf("%d",&ca);

12     while( ca-- ){

13         int n,m;

14         scanf("%d%d",&n,&m);

15         char s[ maxn ];

16         for( int i=0;i<n;i++ ){

17             scanf("%s",s);

18             for( int j=0;j<m;j++ ){

19                 if( s[j]=='.' ) mat[i][j] = 1;

20                 else mat[i][j] = 0;

21             }

22         }

23         //memset( dp,0,sizeof( dp ) );

24         if( mat[0][0]==1 ) dp[0][0] = 1;

25         else dp[0][0]=0;

26         for( int i=1;i<m;i++ ){

27             dp[ 0 ][ i ] = dp[ 0 ][ i-1 ];

28             if( mat[0][i]==0 )

29                 dp[0][i] = 0;

30         }

31         for( int i=1;i<n;i++ ){

32             dp[ i ][ 0 ] = dp[ i-1 ][ 0 ];

33             if( mat[i][0]==0 )

34                 dp[i][0] = 0;

35         }

36         for( int i=1;i<n;i++ ){

37             for( int j=1;j<m;j++ ){

38                 if( mat[i][j]==1 )

39                     dp[i][j] = dp[i-1][j]+dp[i][j-1];

40                 else dp[i][j]=0;

41             }

42         }

43         printf("Existuje %d ruznych cest.\n",dp[n-1][m-1]);

44     }

45     return 0;

46 }

47                 

48         

不要多余的memset,会TLE。。。

 

你可能感兴趣的:(poj)