제출 #1323993

#제출 시각아이디문제언어결과실행 시간메모리
1323993sh_qaxxorov_571은행 (IZhO14_bank)C++20
44 / 100
1092 ms332 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; int N, M; vector<int> salary; vector<int> bills; bool found = false; // Backtracking funksiyasi void solve(int person_idx) { if (found) return; // Agar barcha odamlarga maosh berib bo'lingan bo'lsa if (person_idx == N) { found = true; return; } // Joriy odam uchun banknotlar kombinatsiyasini qidirish // Bu qismda Subset Sum algoritmi yoki ichki backtracking ishlatiladi } /* Soddaroq yondashuv: Har bir banknotni biror odamga berishga urinib ko'rish. Har bir banknot ixtiyoriy bitta odamga tegishli bo'lishi yoki umuman ishlatilmasligi mumkin. */ bool can_pay(int bill_idx, vector<int>& current_salaries) { if (bill_idx == M) { for (int s : current_salaries) { if (s != 0) return false; } return true; } for (int i = 0; i < N; i++) { if (current_salaries[i] >= bills[bill_idx]) { current_salaries[i] -= bills[bill_idx]; if (can_pay(bill_idx + 1, current_salaries)) return true; current_salaries[i] += bills[bill_idx]; // Backtrack } } // Banknotni ishlatmaslik holati if (can_pay(bill_idx + 1, current_salaries)) return true; return false; } int main() { cin >> N >> M; salary.resize(N); for (int i = 0; i < N; i++) cin >> salary[i]; bills.resize(M); for (int i = 0; i < M; i++) cin >> bills[i]; // Kattaroq banknotlarni oldinroq tekshirish samaraliroq sort(bills.rbegin(), bills.rend()); if (can_pay(0, salary)) cout << "YES" << endl; else cout << "NO" << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...