整数划归的题目,可以使用滚动数组节省空间。
#include <stdio.h>

const int bas = 1000000007;

int dp[4501][4501];

int main ()
{

    
int n, m;

    
while ( scanf ( "%d%d"&n, &m ) != EOF )
    
{
        
int i, j;
        
for ( i=1; i<=n; i++ )
        
{
            dp[i][
0= 0;
            dp[
0][i] = 1;
        }

        dp[
0][0= 1;

        
for ( i=1; i<=m; i++ )
        
{
            
for ( j=1; j<=n; j++ )
            
{
                
if ( i >= j )
                
{
                    dp[i][j] 
= ( dp[i][j-1+ dp[i-j][j] ) % bas;
                }

                
else
                
{
                    dp[i][j] 
= dp[i][j-1];
                }

            }

        }


        printf ( 
"%d\n", dp[m][n] );
    }

    
return 0;
}