สมมติว่าเรามีอาร์เรย์ 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