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 }
keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/2880938.html