Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาคนจำนวนสูงสุดที่เราสร้างความสุขได้ใน Python


สมมติว่าเรามีรายชื่อลูกค้าและอารมณ์รายการอื่น สองตัวนี้มีความยาวเท่ากัน เรามีจำนวนเต็ม k อีกตัวด้วย ในแต่ละนาที i ลูกค้า[i] จำนวนคนมาที่ร้าน และเมื่ออารมณ์[i] =1 แสดงว่าลูกค้ามีความสุข และเมื่ออารมณ์[i] =0 พวกเขาจะเศร้า เราสามารถตั้งค่ารายการย่อยของขนาด k ของอารมณ์เป็น 1 วินาที สุดท้ายเราต้องหาจำนวนคนสูงสุดที่เราสร้างความสุขได้

ดังนั้นหากอินพุตเป็นเหมือนลูกค้า =[2, 3, 6, 6, 3] อารมณ์ =[1, 1, 0, 0, 0] k =2 แล้วผลลัพธ์จะเป็น 17 เพราะถ้าเรากำหนดอารมณ์[2 ] และอารมณ์[3] ถึง 1 แล้วอารมณ์รวมจะเป็น 2 + 3 + 6 + 6 =ลูกค้าพอใจ 17 ราย

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดของอารมณ์
  • a :=รายการขนาด (n + 1) และเติมด้วย 0
  • s :=0
  • สำหรับฉันในช่วง 0 ถึง n - 1 ทำ
    • a[i + 1] :=a[i]
    • ถ้าอารมณ์[i]ไม่ใช่ศูนย์ แล้ว
      • s :=s + ลูกค้า[i]
    • มิฉะนั้น
      • a[i + 1] :=a[i + 1] + ลูกค้า[i]
  • d :=0
  • สำหรับฉันอยู่ในช่วง k ถึง n ทำ
    • d :=สูงสุดของ d และ (a[i] - a[i - k])
  • ผลตอบแทน s + d

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def solve(customers, mood, k):
   n = len(mood)
   a = [0] * (n + 1)
   s = 0
   for i in range(n):
      a[i + 1] = a[i]
      if mood[i]:
         s += customers[i]
      else:
         a[i + 1] += customers[i]
   d = 0
   for i in range(k, n + 1):
      d = max(d, a[i] - a[i - k])
   return s + d

customers = [2, 3, 6, 6, 3]
mood = [1, 1, 0, 0, 0]
k = 2
print(solve(customers, mood, k))

อินพุต

[2, 3, 6, 6, 3], [1, 1, 0, 0, 0], 2

ผลลัพธ์

17