一开始并不知道这个题是推论题,就用了刚接触的深搜来,结果超时了,学艺不精不知道咋优化了,求大神指点迷津
#include<bits/stdc++.h>
using namespace std;
int a[31];
int book[31],b[31];
int n,s=0,r;
void dfs(int step,int m,int r){
int sum=0;
if(step==r+1){
sum=0;
for(int i=1;i<=r;i++){
sum+=b[i];
}
s+=sum;
return;
}
for(int i=m;i<=n;i++){
if(book[i]==0){
b[step]=a[i];
book[i]=1;
dfs(step+1,i+1,r);
book[i]=0;
}
}
return;
}
int main(){
int i=1;
do{
scanf("%d",&a[i++]);
}while(getchar()!='\n');
// cout<<"cs1";
n=i-1;
// cout<<n<<endl;
for(int j=1;j<=n;j++){
dfs(1,1,j);
}
cout<<s;
return 0;
}