HDU1028 (DP)

题意:整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。

View Code
 1 #include<stdio.h>

 2 const int maxn = 124;

 3 int dp[ maxn ][ maxn ];

 4 int main(){

 5     for( int i=0;i<maxn;i++ ){

 6         //dp[ 0 ][ i ]=dp[ i ][ 0 ]=0;

 7         dp[ 1 ][ i ]=dp[ i ][ 1 ]=1;

 8     }

 9     for( int i=2;i<=120;i++ ){

10         for( int j=2;j<=120;j++ ){

11             if( i==j ) dp[ i ][ j ]=dp[ i ][ j-1 ]+1;

12             else if( i<j ) dp[ i ][ j ]=dp[ i ][ i ];

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

14         }

15     }

16     int n;

17     while( scanf("%d",&n)!=EOF ){

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

19     }

20     return 0;

21 }

 

你可能感兴趣的:(HDU)