ข้อนี้ต้องถามว่าหากต้องแบ่งหุงข้าว จาน โดยแต่ละครั้งหุงได้เกิน จานต่อครั้ง จะสามารถแบ่งหุงจนครบ ได้กี่วิธี
สำหรับข้อนี้วิธีแรกที่เห็นได้ง่ายที่สุดคือ Dynamic Programming โดยเห็นได้ว่า (ในการหุงครั้งจากต้องการ จะเหลือต้องการ จานโดย )
แต่เนื่องจากข้อนี้กำหนด วิธีนี้ที่ใช้เวลา จึงช้าเกินไป เราจึงต้องใช้วิธีที่เร็วกว่านี้
เราสามารถกำหนด ซึ่งจะทำให้สามารถคำนวณ เมื่อ และ เมื่อ ในเวลา ( สามารถคำนวณเป็น ในเวลา เช่นกัน)
ดังนั้นจึงต้องใช้เวลาเพียง สำหรับการคำนวณ และ สำหรับแต่ละ ทั้งหมดจึงใช้เวลา
โค้ดประกอบคำอธิบาย
dp[0] = 1; C[0] = 1; for(int i=1;i<=n;i++) { if (i-k-1>=0) dp[i] = C[i-1] - C[i-k-1]; else dp[i] = C[i-1]; dp[i] = dp[i] %2009; if(dp[i]<0) dp[i]+=2009; C[i] = C[i-1] + dp[i] %2009; }