#include
#include
#include
#include
#include
using namespace std;
#define MAX 20
int a[]={5,1,7,9,2,10,11,4,13,14};
int st[MAX];
int top=-1;
int n=10;
/*
void dfs1(int start, int sum)
{
if(start==n || sum<0)
return;
if(sum==0)
{
for(int i=0;i<=top;i++)
cout<
cout<
}else{
top++;
for(int i=start;i
{
st[top]=a[i];
dfs(i,sum-a[i]); //允许重复
//dfs(i+1,sum-a[i]) //不允许重复
}
top--; //backtrace
}
};
*/
void dfs2(int start, int sum)
{
if(start==n || sum<0)
return;
if(sum==0)
{
for(int i=0;i<=top;i++)
cout<
cout<
}else{
///*不允许重复
top++;
st[top]=a[start];
dfs(start+1,sum-a[start]);
top--;
//*/
//允许重复
/*
for(int m=a[start];m<=sum;m+=a[start])
{
top++;
st[top]=a[start];
dfs(start+1,sum-m);
}
top-=sum/a[start];
*/
//不要
dfs(start+1,sum);
}
}
int main()
{
dfs(0,28);
system("pause");
return 0;
}
阅读(744) | 评论(0) | 转发(0) |