Em có 1 đề bài dạng như thế này: “Cho m con đường, chọn k con đường sao cho thoả mãn nhất…”
Trước khi nghĩ thuật chuẩn thì em đang định làm trâu cho subtask m <= 32 và k <= 7. Em thấy là nếu chọn k cái bất kì trong m cái thì cần mCk trường hợp thì chỉ tầm 3 triệu là ok rồi nên em đang nghĩ đến việc đệ quy rồi check nhưng có vẻ như nó quá thời gian khi em nộp, code em có dạng tựa tựa thế này:
void backtrack()
{
if(p.size() == k)
{
ll res = cal() ;
ans = max(ans, res) ;
return ;
}
FOR(i, 1, m)
{
if(dd[i]) continue ;
p.pb(i) ; dd[i] = 1 ;
backtrack() ;
p.pop_back() ; dd[i] = 0 ;
}
}
void solve()
{
FOR(i, 1, m)
{
p.pb(i) ; dd[i] = 1 ;
backtrack() ;
p.pop_back() ; dd[i] = 0 ;
}
cout << ans << ' ' ;
}
Cho em hỏi vì sao trâu đệ quy lại quá thời gian và nên làm thể nào cho chuẩn với subtask này ạ !