Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลรวมเส้นทางสูงสุดสำหรับแต่ละตำแหน่งที่มีการกระโดดภายใต้เงื่อนไขการแบ่งตัวใน C++


ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อค้นหาผลรวมเส้นทางสูงสุดสำหรับแต่ละตำแหน่งที่มีการกระโดดภายใต้เงื่อนไขการแบ่งแยก

สำหรับสิ่งนี้ เราจะจัดเตรียมอาร์เรย์ของจำนวนเต็มสุ่มจำนวน 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