---
tags: 'Propose for Bedao'
---
# CHIA KẸO
<h2>
Statement
</h2>
Có $n$ cái kẹo trên bàn; người ta muốn cất kẹo vào trong một số túi sao cho mỗi túi chứa một số các viên kẹo nằm liên tiếp nhau trên bàn.
Đồng thời; mỗi túi có không quá $m$ viên kẹo, và số kẹo trong hai túi liên tiếp hơn kém nhau không quá $d$ viên.
<b>Yêu cầu:</b> Bạn hãy tính số cách chia kẹo vào túi thỏa mãn nhé.
<h2>
Input
</h2>
- Một dòng chứa ba số nguyên dương $n, m, d$ ($n \le 10^{18}, d\le m \le 10$).
<h2>
Output
</h2>
- In ra một số nguyên là số cách chia kẹo. Vì đáp án có thể rất lớn nên hãy in ra số dư khi chia cho $10^9 + 7$.
<h2>
Scoring
</h2>
- Subtask 1 (50 điểm): $n\le 10^5$.
- Subtask 2 (50 điểm): $n\le 10^{18}$.
<h2>
Example
</h2>
| Input | Output |
| ----- | ------ |
| 5 3 1 | 10 |
<h3>
Solution
</h3>
Gọi $f(i,j)$ là số cách chia $i$ kẹo vào các túi sao cho số kẹo ở túi cuối cùng là $j$. $f(i,j)=\sum_{t=j-d}^{j+d}f(i-j,t)$
Từ đây ta ra được thuật toán nhân ma trận.
Code: https://ideone.com/4tLHec