ผมใช้แนวคิดแบบเดียวกัน และใช้หลักการ Dynamic Programming ตอนเขียนโปรแกรมครับ
ที่ผมเขียนคือ จะวนลูปนอก n ครั้ง โดยใส่หินลงไปทีละก้อนใน arrary ที่มีขนาดเท่ากับผลรวมของน้ำหนักหิน เช่นถ้าเรารู้ว่า sum ของนำ้หนักหินทั้ง n ก้อน คือ 10000 ก็สร้าง array ขนาด 10000 ขึ้นมา แล้วเก็บ state ผลรวมของนำ้หนักหินที่ตำแหน่งต่างๆใน array เช่นถ้าเราใส่หินมาแล้ว m ก้อน และนำ้หนักรวมของ m ก้อนมีค่าเท่ากับ 4000 ก็เปลี่ยน state a[4000] = 1 (จากเริ่มต้น initialize ค่า a ให้มี state เป็น 0 ให้หมดทุกตำแหน่งก่อน) ตอนใส่หินก้อนที่ m+1 ก็ให้บวกนำ้หนักเพิ่มจาก state ก่อนๆที่มีค่าเท่ากับ 1 ทั้งหมดด้วย