คำถามนี้มีการตั้งค่าคล้ายกับFind a array ที่เหมาะกับชุดของผลรวมแม้ว่าจะค่อนข้างแตกต่างกันในเป้าหมาย
พิจารณาอาร์เรย์ของความยาวA
n
อาร์เรย์มีจำนวนเต็มบวกเท่านั้น A = (1,1,2,2)
เช่น ให้เรากำหนดf(A)
เป็นชุดของผลรวมของทุกคนที่ไม่ว่างเปล่า subarrays A
ต่อเนื่องกันของ ในกรณีf(A) = {1,2,3,4,5,6}
นี้ ขั้นตอนในการผลิตf(A)
มีดังนี้:
subarrays ของAreA
จำนวนเงินของตนมี(1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
ชุดที่คุณได้รับจากรายการนี้จึงเป็น1,1,2,2,2,3,4,4,5,6
{1,2,3,4,5,6}
เราเรียกอาเรย์ที่A
ไม่ซ้ำกันถ้าไม่มีอาเรย์อื่นB
ที่มีความยาวเท่ากันเช่นนั้นf(A) = f(B)
ยกเว้นสำหรับอาเรย์ที่A
กลับด้าน เป็นตัวอย่างf((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
แต่ไม่มีความยาวอื่น ๆ3
ที่สร้างชุดของผลรวมเดียวกัน
เราจะพิจารณาอาร์เรย์ที่องค์ประกอบที่มีทั้งจำนวนเต็มรับหรือs
s+1
เช่นถ้าs=1
อาร์เรย์เท่านั้นที่จะมีและ1
2
งาน
งานสำหรับที่กำหนดn
และs
จะนับจำนวนอาร์เรย์ที่ไม่ซ้ำกันของความยาวนั้น คุณสามารถสรุปได้ว่าs
อยู่ระหว่างและ1
9
คุณไม่ควรนับการย้อนกลับของอาเรย์รวมทั้งอาเรย์เอง
ตัวอย่าง
s = 1
n+1
คำตอบอยู่เสมอ
s = 2
คำตอบที่นับจากn = 1
ขึ้นคือ:
2,3,6,10,20,32,52,86
s = 8
คำตอบที่นับจากn = 1
ขึ้นคือ:
2,3,6,10,20,36,68,130
คะแนน
สำหรับรับn
รหัสของคุณควรเอาท์พุทคำตอบสำหรับทุกค่าของs
จากไป1
9
คะแนนของคุณคือมูลค่าสูงสุดn
ซึ่งจะเสร็จสมบูรณ์ในหนึ่งนาที
การทดสอบ
ฉันจะต้องเรียกใช้รหัสของคุณบนเครื่องอูบุนตูของฉันดังนั้นโปรดระบุคำแนะนำโดยละเอียดที่สุดเท่าที่จะทำได้เพื่อรวบรวมและเรียกใช้รหัสของคุณ
ลีดเดอร์บอร์ด
- n = 24โดย Anders Kaseorg ในRust (34 วินาที)
- n = 16โดย Ourous in Clean (36 วินาที)
- n = 14โดย JRowan ในCommon LISP (49 วินาที)