HDU 1258&&POJ 1564&&ZOJ 1711 DFS

题意:给你一个目标值 t ,n个正整数;问有多少种不同的和等于 t。。。



#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<map>
#include<cmath>
#include<iostream>
#include <queue>
#include <stack>
#include<algorithm>
#include<set>
using namespace std;
#define INF 1e8
#define eps 1e-8
#define LL long long
#define maxn 2
#define mol 1000000007
int t,n,a[15],num[15];
int j,flag;
void dfs(int x,int sum)
{
    if(sum>t) return;
	else if(sum==t)
	{
		flag=1;
	    printf("%d",num[0]);
		for(int i=1;i<j;i++)
			printf("+%d",num[i]);
		printf("\n");
		return;
	}
	else 
	{
		int tem=-1;
		for(int i=x+1;i<=n;i++)
		{
			if(a[i]!=tem)
			{
				tem=a[i];
				num[j++]=a[i];
				dfs(i,sum+a[i]);
				j--;
			}
		}
	}
}
int main()
{
	while(scanf("%d%d",&t,&n))
	{
	    if(!t) break;
		for(int i=1;i<=n;i++)
			scanf("%d",&a[i]);
		memset(num,0,sizeof(num));
	    j=0;flag=0;
		printf("Sums of %d:\n",t);
		dfs(0,0);
		if(!flag) printf("NONE\n");
	}
return 0;
}


你可能感兴趣的:(HDU 1258&&POJ 1564&&ZOJ 1711 DFS)