สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n และมีตัวเลขอื่น s มีแก้วน้ำเปล่าหนึ่งใบและแก้วน้ำเปล่าอีกใบบนโต๊ะ ในเกมมีผู้เล่นไม่กี่คน ในแต่ละการเคลื่อนไหว ผู้เล่นจะหยิบแก้วน้ำเปล่าหนึ่งแก้วแล้วเทน้ำทั้งหมดลงในถ้วย หากเกิน ผู้เล่นจะแพ้ เราต้องเช็คก่อนว่าทั้งหมดจะเป็นผู้ชนะหรือไม่ (ถ้วยจะไม่ล้น) หากเติมหนึ่งเต็มแล้ว ผู้เล่นคนต่อไปจะไม่เล่นท่าของเขา/เธอ นี่คือความจุของถ้วยเปล่าและ A[i] คือปริมาณน้ำที่มีอยู่ในถ้วย ith
ดังนั้น ถ้าอินพุตเป็น A =[3, 1, 3]; s =4 ผลลัพธ์จะเป็น True เพราะผู้เล่นคนแรกและคนที่สอง ถ้วยจะเต็ม สุดท้ายผู้เล่นจะไม่เล่นท่านั้น
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
k := 0 n := size of A sort the array A for initialize i := 0, when i < n - 1, update (increase i by 1), do: k := k + A[i] if k > s, then: return false Otherwise return true
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; bool solve(vector<int> A, int s){ int k = 0; int n = A.size(); sort(A.begin(), A.end()); for (int i = 0; i < n - 1; i++) k += A[i]; if (k > s) return false; else return true; } int main(){ vector<int> A = { 3, 1, 3 }; int s = 4; cout << solve(A, s) << endl; }
อินพุต
{ 3, 1, 3 }, 4
ผลลัพธ์
1