演算法訓練 和為T

2021-08-26 14:41:50 字數 1265 閱讀 1479

/*

問題描述

從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。

輸入格式

第一行乙個正整數n,表示整數集內元素的個數。

第二行n個整數,用空格隔開。

第三行乙個整數t,表示要達到的和。

輸出格式

輸出有若干行,每行輸出一組解,即所選取的數字,按照輸入中的順序排列。

若有多組解,優先輸出不包含第n個整數的;若都包含或都不包含,優先輸出不包含第n-1個整數的,依次類推。

最後一行輸出總方案數。

樣例輸入

5-7 -3 -2 5 9

0樣例輸出

-3 -2 5

-7 -2 9

2資料規模和約定

1<=n<=22

t<=maxlongint

集合中任意元素的和都不超過long的範圍

*/

#if 1 

#includevoid input( int , int ) ;

void output( int , int );

void dfs( int ,int , int , int , int , long long ,int * ) ;

int main(void)

; input( n , sz );

long long t ;

scanf("%lld" , & t );

int count = 0 , num[30]= ; ;

dfs( sz ,num ,n - 1 , 0 , 0 , t , &count) ;

printf("%d\n" , count) ;

return 0 ;

}void dfs( int sz , int num ,int tmp1, int tmp2, int sum ,long long t ,int *count)

dfs( sz ,num ,tmp1 -1 , tmp2 , sum , t , count) ;

num[tmp2] = sz[tmp1] ;

sum += num[tmp2] ;

if( sum == t)

dfs( sz , num , tmp1 -1 , tmp2 + 1 , sum , t , count) ;

}void output( int sz , int n )

}void input( int n , int sz )

} #endif

演算法訓練 和為T

問題描述 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。輸入格式 第一行乙個正整數n,表示整數集內元素的個數。第二行n個整數,用空格隔開。第三行乙個整數t,表示要達到的和。輸出格式 輸出有若干行,每行輸出一組解,即所選取的數字,按照輸入中的順序排...

演算法訓練 和為T

題目鏈結 問題描述 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。include using namespace std long long a 25 select 22 cnt,res,n void solve int cur,long lon...

演算法訓練 和為T (90分)

問題描述 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。輸入格式 第一行乙個正整數n,表示整數集內元素的個數。第二行n個整數,用空格隔開。第三行乙個整數t,表示要達到的和。輸出格式 輸出有若干行,每行輸出一組解,即所選取的數字,按照輸入中的順序排...