杆切割
杆的长度为n。还提供了另一个表格,其中包含不同的尺寸和每种尺寸的价格。通过切割杆并在市场上出售来确定最高价格。
通过在不同位置进行切割并在切割杆后比较价格来获得最佳价格。
让f(n)在切成长度为n的行后将返回最大可能价格。我们可以像这样简单地编写函数f(n)。
f(n):=price[i]+f(n–i–1)的最大值,其中i的范围为0到(n–1)。
输入输出
输入:
不同长度的价格,以及杆的长度。长度是8。
输出:
出售后的最大利润是22。
切割长度为2和6的杆。利润为5+17=22
算法
rodCutting(price, n)
输入: 价格列表,列表上不同价格的数量。
产出:通过切割杆获得最大利润。
Begin
define profit array of size n + 1
profit[0] := 0
for i := 1 to n, do
maxProfit := - ∞
for j := 0 to i-1, do
maxProfit := maximum of maxProfit and (price[j] + profit[i-j-1])
done
profit[i] := maxProfit
done
return maxProfit
End示例
#include <iostream>
using namespace std;
int max(int a, int b) {
return (a > b)? a : b;
}
int rodCutting(int price[], int n) { //from price and length of n, find max profit
int profit[n+1];
profit[0] = 0;
int maxProfit;
for (int i = 1; i<=n; i++) {
maxProfit = INT_MIN; //initially set as -ve infinity
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 << "Maximum Price: "<< rodCutting(priceList, rodLength);
}输出结果
Maximum Price: 22
热门推荐
10 滑稽搞笑结婚祝福语简短
11 结婚请柬祝福语简短搞笑
12 生日祝福语祝自己简短
13 送祝福语给别人简短
14 早安短句英文祝福语简短
15 接亲祝福语女生文案简短
16 预祝中秋简短的祝福语
17 朋友的孩子祝福语简短
18 书写大赛祝福语范文简短