ให้เราพิจารณาเกมที่ผู้เล่นสามารถทำคะแนนได้ 3, 5 หรือ 10 ในแต่ละการเคลื่อนไหว มีการให้คะแนนเป้าหมายด้วย หน้าที่ของเราคือค้นหาว่ามีวิธีใดบ้างที่จะบรรลุคะแนนเป้าหมายนั้นด้วยคะแนนสามแต้มนั้น
ด้วยวิธีการเขียนโปรแกรมแบบไดนามิก เราจะสร้างรายการคะแนนทั้งหมดตั้งแต่ 0 ถึง n และสำหรับแต่ละค่า 3, 5, 10 เราเพียงแค่อัปเดตตาราง
อินพุตและเอาต์พุต
Input: The maximum score to reach using 3, 5 and 10. Let the input is 50. Output: Number of ways to reach using (3, 5, 10)50: 14
อัลกอริทึม
countWays(n)
เป็นไปได้แค่ 3 คะแนน คือ 3, 5 และ 10
ป้อนข้อมูล: n คือคะแนนสูงสุดที่จะไปถึง
ผลลัพธ์ − จำนวนวิธีที่จะได้รับคะแนน n.
Begin create table of size n+1 set all table entries to 0 table[0] := 1 for i := 3 to n, do table[i] := table[i] + table[i-3] done for i := 5 to n, do table[i] := table[i] + table[i-5] done for i := 10 to n, do table[i] := table[i] + table[i-10] done return table[n] End
ตัวอย่าง
#include <iostream>
using namespace std;
// Returns number of ways to reach score n
int countWay(int n) {
int table[n+1], i; //table to store count for each value of i
for(int i = 0; i<=n; i++) {
table[i] = 0; // Initialize all table values as 0
}
table[0] = 1; //set for 1 for input as 0
for (i=3; i<=n; i++) //try to solve using 3
table[i] += table[i-3];
for (i=5; i<=n; i++) //try to solve using 5
table[i] += table[i-5];
for (i=10; i<=n; i++) //try to solve using 10
table[i] += table[i-10];
return table[n];
}
int main() {
int n;
cout << "Enter max score: ";
cin >> n;
cout << "Number of ways to reach using (3, 5, 10)" << n <<": " << countWay(n);
} ผลลัพธ์
Enter max score: 50 Number of ways to reach using (3, 5, 10)50: 14