ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อค้นหาผลรวมเส้นทางสูงสุดสำหรับแต่ละตำแหน่งที่มีการกระโดดภายใต้เงื่อนไขการแบ่งแยก
สำหรับสิ่งนี้ เราจะจัดเตรียมอาร์เรย์ของจำนวนเต็มสุ่มจำนวน n ตัว งานของเราคือกระโดดจากตำแหน่งหนึ่งไปอีกตำแหน่งหนึ่งหากมันแบ่งมันออก และสุดท้ายให้เส้นทางผลรวมสูงสุดสำหรับทุกตำแหน่งที่กำหนด
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; //finding maximum sum path void printMaxSum(int arr[], int n) { int dp[n]; memset(dp, 0, sizeof dp); for (int i = 0; i < n; i++) { dp[i] = arr[i]; int maxi = 0; for (int j = 1; j <= sqrt(i + 1); j++) { if (((i + 1) % j == 0) && (i + 1) != j) { if (dp[j - 1] > maxi) maxi = dp[j - 1]; if (dp[(i + 1) / j - 1] > maxi && j != 1) maxi = dp[(i + 1) / j - 1]; } } dp[i] += maxi; } for (int i = 0; i < n; i++) cout << dp[i] << " "; } int main() { int arr[] = { 2, 3, 1, 4, 6, 5 }; int n = sizeof(arr) / sizeof(arr[0]); printMaxSum(arr, n); return 0; }
ผลลัพธ์
2 5 3 9 8 10