企业微信营销软件,移动端seo,asp 网站 内容静态化,网络营销是什么营销问题描述 从一个大小为n的整数集中选取一些元素#xff0c;使得它们的和等于给定的值T。每个元素限选一次#xff0c;不能一个都不选。
输入格式 第一行一个正整数n#xff0c;表示整数集内元素的个数。 第二行n个整数#xff0c;用空格隔开。 第三行一个整数T使得它们的和等于给定的值T。每个元素限选一次不能一个都不选。
输入格式 第一行一个正整数n表示整数集内元素的个数。 第二行n个整数用空格隔开。 第三行一个整数T表示要达到的和。
输出格式 输出有若干行每行输出一组解即所选取的数字按照输入中的顺序排列。 若有多组解优先输出不包含第n个整数的若都包含或都不包含优先输出不包含第n-1个整数的依次类推。 最后一行输出总方案数。
样例输入
5 -7 -3 -2 5 9 0
样例输出
-3 -2 5 -7 -2 9 2
数据规模和约定 1n22 Tmaxlongint 集合中任意元素的和都不超过long的范围 #include iostream using namespace std;
int visited[22];//用来记录节点是否被访问过
int seq[22];//用来盛放序列
int n,ans,cnt0;//n表元素个数ans是结果cnt是结果的个数
void backtrack(int t)//因为题目要求先输出不包含第n个元素的所以数组要倒着遍历
{ if(t0) { int sum0,sumofv0; for(int i0;in;i) { if(visited[i]) sumseq[i]; sumofvvisited[i];//用来看是否所有节点都未被访问过 } if(sumanssumofv)//如果序列中有节点被访问过并且和是题目要求的就输出 { for(int i0;in;i) if(visited[i]) coutseq[i] ; coutendl; cnt;//解的个数要 } return; } for(int i0;i1;i) { visited[t]i; backtrack(t-1); }
} int main()
{ cinn; for(int i0;in;i) cinseq[i]; cinans; backtrack(n-1); coutcntendl; return 0;
} 转自这个博客
最近自己很不在状态不能静下心来敲代码敲不出来只能转自别人的博客。