感想:DFS递归求解
#include<iostream> #include<stdio.h> #include<algorithm> #include<string> #include<stack> #include<map> #include<vector> #include<deque> #include<cmath> using namespace std; int sum=0,ma1x; vector<int> q; vector<vector<int> > ans; void get(int i,int b[],int a[],int M){ sum+=a[i]; if(sum>ma1x){ sum-=a[i]; return ; } q.push_back(a[i]); if(q.size()!=1&&b[sum]==1) ans.push_back(q); for(int j=i+1;j<M;j++){ get(j,b,a,M); } q.pop_back(); sum-=a[i]; } bool comp1(vector<int> &a,vector<int> &b){ if(a.size()!=b.size()) return a.size()<b.size(); return a<b; } int main(){ int N,i,M,o,j,k; cin>>N; for(o=0;o<N;o++){ ans.clear(); int b[100000]={0}; int top=0,end=0; cin>>M; int *a=new int[M]; for(i=0;i<M;i++){ scanf("%d",&a[i]); b[a[i]]=1; } sort(a,a+M); ma1x=a[M-1]; //q.push(0); for(j=0;j<M;j++) get(j,b,a,M); sort(ans.begin(),ans.end(),comp1); if(!ans.empty()) for(j=0;j<ans.size();j++){ int s=0; for(k=0;k<ans[j].size();k++){ if(k!=0) printf("+"); printf("%d",ans[j][k]); s+=ans[j][k]; } printf("=%d\n",s); } else{ printf("Can't find any equations.\n"); } printf("\n"); delete a; } }