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

โปรแกรมหากำไรสูงสุดโดยการตัดก้านที่มีความยาวต่างกันใน C++


สมมติว่าเรามีไม้เรียวยาว n เรายังมีรายการที่มีขนาดและราคาแตกต่างกันสำหรับแต่ละขนาด เราต้องหาราคาสูงสุดโดยการตัดแท่งแล้วขายในตลาด เพื่อให้ได้ราคาดีที่สุดโดยการตัดตำแหน่งต่างๆ และเปรียบเทียบราคาหลังตัดก้าน

ดังนั้น หากอินพุตมีค่าเท่ากับราคา =[1, 5, 8, 9, 10, 17, 17, 20], n =8 ผลลัพธ์จะเป็น 22 เช่นเดียวกับการตัดแท่งยาว 2 และ 6 กำไรคือ 5 + 17 =22

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดขนาดกำไรของอาร์เรย์:n+1

  • กำไร[0] :=0

  • สำหรับการเริ่มต้น i :=1 เมื่อฉัน <=n อัปเดต (เพิ่ม i ขึ้น 1) ทำ -

    • maxProfit :=ลบอินฟินิตี้

    • สำหรับการเริ่มต้น j :=0 เมื่อ j

      • maxProfit :=สูงสุดของ maxProfit และราคา[j] + profit[i − j − 1]

    • กำไร[i] :=maxProfit

  • คืนกำไรสูงสุด

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int max(int a, int b) {
   return (a > b)? a : b;
}
int rodCutting(int price[], int n) {
   int profit[n+1];
   profit[0] = 0;
   int maxProfit;
   for (int i = 1; i<=n; i++) {
      maxProfit = INT_MIN;
      for (int j = 0; j < i; j++)
      maxProfit = max(maxProfit, price[j] + profit[i-j-1]);
      profit[i] = maxProfit;
   }
   return maxProfit;
}
int main() {
   int priceList[] = {1, 5, 8, 9, 10, 17, 17, 20};
   int rodLength = 8;
   cout << rodCutting(priceList, rodLength);
}

อินพุต

{1, 5, 8, 9, 10, 17, 17, 20}, 8

ผลลัพธ์

22