top1编程
← 返回题目
题解

【提高】和为T

1 条题解

  • 0
    @ 2026-7-29 0:17:47
    #include<iostream>
    #include<string.h>
    #include<stdlib.h>
    using namespace std;
    int a[40];
    int book[40];
    int n,T,sum,count;
    void DFS(int k);
    int main()
    {
    	int i,j;
    	cin>>n;
    	for(i=0;i<n;i++)
    	cin>>a[i];
    	cin>>T;
    	sum=0;
    	count=0;
    	memset(book,0,sizeof(book));
    	DFS(n-1);        //按题目要求的输出顺序,从后往前搜索 
    	printf("%d&#92;n",count);
    	return 0;
    }
     
    void DFS(int k)
    {
    	int i,j,flag=0;
    	if(k<0)
    	{
    		sum=0;
    		for(i=0;i<n;i++)
    		{
    			if(book[i]==1)
    			{
    				flag=1;
    				sum+=a[i];
    			}
    		}
    		if(sum==T && flag)  //flag是为了判断这n个数是不是全没被选中,全没被选中是不允许的。 
    		{
    			count++;
    			for(i=0;i<n;i++)
    			{
    				if(book[i]==1)
    				printf("%d ",a[i]);
    			}
    			printf("&#92;n");
    		}
    		return ;
    	}
    	book[k]=0;
    	DFS(k-1);
    	book[k]=1;
    	DFS(k-1);
    }
    
    • 1