สร้างเซตย่อยทั้งหมดจากเซต {0, 1, ..., n-1}
คำใบ้: ในแต่ละตัวเลข มี 2 ทางเลือกคือ "เลือก" หรือ "ไม่เลือก"
เรียงสับเปลี่ยนเลข $n$ ตัวในทุกรูปแบบที่เป็นไปได้
คำใบ้: ใช้ array chosen เพื่อจำว่าเลขใดใช้ไปแล้ว
search(k+1) สองครั้ง ครั้งแรกไม่ต้องใส่ค่า $k$ ครั้งที่สองให้ push_back(k) ก่อนเรียก และอย่าลืม pop_back() หลังเรียกเสร็จ
!chosen[i] ให้ทำ chosen[i]=true, ใส่ลงในเวกเตอร์, เรียกตัวเอง, แล้วทำ chosen[i]=false และดึงออก (Undo)
วางควีน $n$ ตัวบนกระดาน $n \times n$ ไม่ให้โจมตีกัน
คำใบ้: วางทีละแถว (Row) และเช็คแนวตั้ง (Column) รวมถึงแนวทแยงทั้งสอง (Diagonals)
diag1[x+y] และ diag2[x-y+n-1] เพื่อเช็คใน $O(1)$
search(y+1)เลือกตัวเลขจากเซต $S$ ให้รวมกันได้ $T$
คำใบ้: เหมือนการสร้างสับเซตแต่ส่งผลรวมปัจจุบัน (Current Sum) ไปในพารามิเตอร์ด้วย
ใช้เลข 4 สี่ตัวและเครื่องหมาย $+ - * /$ เพื่อหาผลลัพธ์ $n$
คำใบ้: มีช่องว่าง 3 ช่อง แต่ละช่องเลือกได้ 4 เครื่องหมาย รวม $4^3=64$ วิธี
search(idx, current_sum) ถ้า current_sum == T ตอบ YES. ถ้า idx == n หรือ current_sum > T (Pruning) ให้ย้อนกลับ
เดินในตาราง $7 \times 7$ ให้ครบทุกช่องโดยไม่ซ้ำจุดเดิม
คำใบ้: ใช้ Symmetry Pruning เพื่อลดการคำนวณลงครึ่งหนึ่ง
เดินม้าหมากรุกให้ครบ 64 ช่องบนกระดาน $8 \times 8$
คำใบ้: ลองเดินไปยังช่องที่มีทางไปต่อ "น้อยที่สุด" ก่อน (Warnsdorf's Rule)
Grid Paths: หากถึงจุดจบก่อนเวลา หรือชนกำแพงที่แบ่งตารางเป็นสองส่วนที่ไม่สามารถไปถึงได้ทั้งคู่ ให้ตัดกิ่งทันที (Pruning)
Knight's Tour: สร้างอาเรย์การเคลื่อนที่ของม้า 8 ทิศทาง เช็คขอบกระดานและช่องที่เคยไปแล้ว หากไปครบ 64 ช่องให้พิมพ์คำตอบและจบโปรแกรม
(()). คำใบ้: นับจำนวนวงเล็บเปิดและปิดที่เหลือ
8. Brackets: solve(open, close, s) ถ้า open > 0 ใส่ ( ได้. ถ้า close > open ใส่ ) ได้ เพื่อรักษาความสมดุล
9. Binomial: การเขียนแบบ Recursive ตรงๆ จะช้ามากหาก $n$ ใหญ่ ควรใช้ **Memoization** เข้ามาช่วยจดบันทึกค่าที่คำนวณแล้ว
10. Palindrome: วนลูปจุดตัดจากตำแหน่งปัจจุบัน หากส่วนหน้าเป็นพาลินโดรม ให้เรียกฟังก์ชันย้อนรอยกับส่วนสตริงที่เหลือ