题目大意:给出一些数字,求出某几个数字之和等于给出的某一个数字 ,并按照要求输出
解决: 排序,dfs
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int num[35]; bool flag; int res[35],n; void dfs(int start,int dest_deep,int current_deep,int current_sum) { if(current_deep==dest_deep) { if(binary_search(num,num+n,current_sum)) { printf("%d",res[0]); for(int i=1;i<dest_deep;i++) printf("+%d",res[i]); printf("=%d\n",current_sum); flag=true; } } else { for(int i=start;i<n-1;i++) {//下边这个if判断使得超时的程序,变为150ms,差别就是这么明显 if(current_sum+num[i]<=num[n-1]) { res[current_deep]=num[i]; dfs(i+1,dest_deep,current_deep+1,current_sum+num[i]); }//下边这个else break语句使得删除后310ms变为150ms,剪枝是多么重要啊 else break; } } } int main() { int i,j,k,icase; scanf("%d",&icase); while(icase--) { scanf("%d",&n); for(i=0;i<n;i++)scanf("%d",&num[i]); sort(num,num+n); flag=false; for(int step=2;step<n;step++) {//step表示多少个数的和,从2......n-1 dfs(0,step,0,0); } if(!flag)puts("Can't find any equations."); printf("\n"); } // system("pause"); return 0; }