【发布时间】:2020-03-14 14:01:20
【问题描述】:
我可以做些什么来优化这段代码,如果语言是 c++,我会更容易理解。
给定一个整数数组和一个总和,任务是计算给定数组的所有子集,总和等于给定总和。 输入:arr[] = {2, 3, 5, 6, 8, 10}, sum = 10, 子集是 -> {5 2 3}, {2 8}, {10},输出:3 输入:arr[] = {1, 2, 3, 4, 5},sum = 10,子集为 -> {4 3 2 1}, {5 3 2 }, {5 4 1},输出:3)
#include<bits/stdc++.h>
using namespace std;
string binary_string(int i,int len){
string res="";
int mod =0;
while(i>0){
mod = i%2;
res+=to_string(mod);
i/=2;
}
int n = res.length();
if(n!=len){
while(n!=len){
res.append("0");
n++;
}
return res;
}
return res;
}
int main()
{
int t;
cin>>t;
while(t--){
string binary;//,subseq;
int n,k,count=0,sum,val;
cin>>n;
vector<int>vect;
for(int i=0;i<n;i++){
cin>>k;
vect.push_back(k);
}
cin>>val;
int bits_range = (int)pow(2,n) - 1;
//cout<<"SUBSETS ARE :"<<endl;
for(int i=0;i<=bits_range;i++){
binary=binary_string(i,n);
sum=0;
for(int i=binary.length()-1;i>=0;i--){
if(binary[i]=='1'){
//subseq+=to_string(vect[i]);
sum+=vect[i];
}
}
if(sum==val){
count++;
//cout<<subseq<<endl;
//subseq="";
}
//subseq="";
}
cout<<count<<endl;
}
}
【问题讨论】:
标签: c++ string vector time-complexity bitmask