i相信知道做前面那个后这个应该很水了
#include
int m1[40000],m2[40000];
void chart( )
{for( int i &#61; 0 ; i <&#61;32780; &#43;&#43;i ){m1[i] &#61; 1;m2[i] &#61; 0;}for( int i &#61; 2; i <&#61; 3;&#43;&#43;i ){for( int j &#61; 0; j <&#61; 32780; &#43;&#43;j )for( int k &#61; 0; k &#43; j <&#61; 32780; k &#43;&#61; i )m2[j &#43; k] &#43;&#61; m1[j];for( int j &#61; 0; j <&#61; 32780; &#43;&#43;j ){m1[j] &#61; m2[j];m2[j] &#61; 0;}}
}
int main( )
{chart( );int n;while( scanf( "%d",&n ) !&#61; EOF )printf( "%d\n",m1[n] );return 0;
}
用完全背包做
#include
#include
int coin[4] &#61; { 0 , 1, 2 , 3},dp[32780],n;
void DP( )
{memset( dp,0,sizeof( dp ) );dp[0] &#61; 1;for( int i &#61; 1; i <&#61; 3; &#43;&#43;i )for( int j &#61; coin[i]; j <&#61; n; &#43;&#43;j )dp[j] &#43;&#61; dp[j-coin[i]];printf( "%d\n",dp[n] );}
int main( )
{while( scanf( "%d",&n ) !&#61; EOF )DP( );return 0;
}