题意:整数划分问题是将一个正整数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 }