//huawei 20220923-1
//内存泄漏次数
int main(){
map<int, set<int>> m, f;
int idx=0;string s;cin>>s;
vector<int> ans(4,0);//m,f,xie,yichang
for(int i=0;i<s.length();i++){
if(s[i]=='{') {
idx++;continue;
}else if(s[i]=='}'){
idx--;
}else if(s[i]=='M'){
m[idx].insert(s[i+1]-'0');
i++;ans[0]++;
}else if(s[i]=='F'){
int free_idx=s[i+1];i++;
if(m[idx].count(free_idx)){
m[idx].erase(free_idx);
ans[1]++;
}else{
ans[3]++;
}
}
}
cout<<ans[0]<<","<<ans[1]<<","<<ans[2]<<","<<ans[3];
return 0;
}
//huawei 20220923-2
//礼物组合求和 超内存
int ans=0;
void dfs(int target, int begin,vector<int> can, vector<int> & p){
if(target==0 && !can.empty() ){
ans++;
return;
}
for(int i=begin;i<p.size() && target-p[i]>=0;i++){
//剪枝
// cout<<i<<endl;
if(i>begin && p[i]==p[i-1]) continue;
can.push_back(p[i]);
dfs(target-p[i], i+1, can, p);
can.pop_back();
}
}
int main()
{
// please define the C input here. FOR EXAMPLE: int n; scanf("%d",&n);
// please finish the FUNCTION body here.
// please define the C output here. FOR EXAMPLE: printf("%d",a);
int m;
cin>>m;
vector<int> p(m);
vector<int> can;
int x;
while(cin>>x){
p.push_back(x);
}
sort(p.begin(), p.end());
int sum= accumulate(p.begin(), p.end(),0);
int target=sum/2;
if (sum%2==0) {
cout<<0;
return 0;
}
dfs(target, 0, can,p);
cout<<ans;
return 0;
}
第三题不会写 leet/ code 1192