HDU 1258 Sum It Up

#include<iostream>
#include<cstdio>
using namespace std;
int num[1024],flag,save[1024],number,N;
void DFS( int n, int sum ,int cnt)
{
if( sum == number )
{
flag = 1;
for( int i = 0; i< cnt ; i++ )
{
printf( i==0?"%d":"+%d",save[i] );
}
puts( "" );
return ;
}
for( int i=n ; i < N ; i++ )
{
if( i==n||num[i-1]!=num[i] )
{
if( sum + num[i]<=number )
{
save[cnt] = num[i];
DFS( i+1, sum+ num[i],cnt+1 );
}
}
}
}
int main( )
{
while( scanf( "%d%d",&number , &N ),number||N )
{
flag = 0;
for( int i = 0 ; i< N ; i++ )
scanf( "%d",&num[i] );
printf( "Sums of %d:\n",number );
DFS( 0,0,0 );
if( !flag )
printf( "NONE\n" );
}
return 0;
}

 

posted @ 2012-02-29 20:16  wutaoKeen  阅读(200)  评论(0编辑  收藏  举报