vector<string> restoreIpAddresses(string s) { vector<string> res; vector<string> ip; back_tracking(s,0,ip,res,3); return res; }
void back_tracking(int depth, int sum) { if (depth > n) { if (max < sum) { max = sum; } return; } if (sum > limit) { return; } if (max < sum) { max = sum; } for (int i = 0; i<n; i++) { if (visited[i] == 0) { visited[i] = 1; back_tracking(depth + 1, sum + foods[i]); printf("depth:%d,sum:%d\n", depth + 1, sum + foods[i]); visited[i] = 0; } } }
int main() { int j; scanf("%d %d", &cal, &num); for (j = 0; j<num; j++) { scanf("%d", &basket[j]); } back_tracking(0);//sum 0으로 시작 printf("%d\n", max);//최대 칼로리출력 return 0; }
int main() { scanf("%d %d", &limit, &n); for (int i = 0; i<n; i++) { scanf("%d", &foods[i]); } back_tracking(0, 0); printf("%d\n", max); return 0; }
void back_tracking(int sum) { int i; if (sum > cal)//sum이 최대 칼로리보다 큰 경우 return; if (sum <= cal && max < sum) {//sum이 최대 칼로리보다 작고 max보다 큰경우 max = sum; } for (i = 0; i<num; i++) { if (visited[i] == 0) {//더한 수를 또 더하지 않도록! 중복방지 visited[i] = 1; back_tracking(sum + basket[i]); visited[i] = 0; } } }
void back_tracking(string &s,int prev_pos,vector<string> &ip,vector<string> &res,int dot_left) { if(ip.size()==4) { res.push_back(ip[0]+"."+ip[1]+"."+ip[2]+"."+ip[3]); return; } for(int i=prev_pos+1;i<=prev_pos+3;++i) { string seg=string(s.begin()+prev_pos,s.begin()+i); int length=s.size()-prev_pos; if(atoll(seg.c_str())>255|| length>3*(dot_left)|| length<dot_left|| (seg.front()=='0'&&seg.size()>1)) return; //if(isValid(seg,i,s,dot_left-1)) //{ ip.push_back(seg); back_tracking(s,i,ip,res,dot_left-1); ip.pop_back(); //} } }