class Solution {
public:
vectorint>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
vectorint>>v,result;
vector<int>v2;
mapint>,int>mp;
int n = candidates.size(),sum,t,n2,n3;
v.push_back(v2);
// for(int i=0;i// cout<// }
// cout<
mp[v2] = 0;
for(int i=0;i){
n2 = v.size();
for(int k=0;k){
// bool flag = false;
for(int j=1;mp[v[k]]+j*candidates[i]<=target;j++){
v2 = v[k];
v2.push_back(candidates[i]);
v2.push_back(j);
if(mp[v[k]]+candidates[i]*j<=target){
v.push_back(v2);
mp[v2] = mp[v[k]]+candidates[i]*j;
// for(int l=0;l// for(int m=0;m// cout<// }
// cout<// }
// cout<// flag = true;
}
}
// if(!flag)break;
}
}
n2 = v.size();
for(int i=0;i){
if(mp[v[i]]==target){
n3 = v[i].size();
v2.clear();
for(int j=0;j2){
for(int k=0;k1];k++){
v2.push_back(v[i][j]);
}
}
result.push_back(v2);
}
}
sort(result.begin(),result.end());
return result;
}
private:
bool isSame(vectorint>>v,vector<int>v2){
int n = v.size(),m = v2.size();
for(int i=0;i){
int p = v[i].size();
if(p==m){
bool flag = true;
for(int j=0;j){
if(v[i][j]!=v2[j]){
flag = false;
break;
}
}
if(flag)
return true;
}
}
return false;
}
};