Skip to content

Commit 6d8acfe

Browse files
committed
feature-test: added the cut lengths for dp rod cut
1 parent 0fae2bf commit 6d8acfe

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

include/0005_DynamicProgramming/0001_RodCutting.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ namespace RodCutting
88
class DynamicProgramming
99
{
1010
private:
11-
int _length;
11+
int _totalLength;
1212
vector<int> _price;
1313
vector<int> _cutPositions;
1414
public:
15-
DynamicProgramming(int length, vector<int> price);
15+
DynamicProgramming(vector<int> price);
1616
int RecursiveRodCutting(int length);
17-
pair<int, vector<int>> DpGetMaximumProfitWithCuts();
17+
pair<int, vector<int>> DpGetMaximumProfitWithCuts(int length);
1818
};
1919
}

source/0005_DynamicProgramming/0001_RodCutting.cc

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ using namespace std;
55

66
namespace RodCutting
77
{
8-
DynamicProgramming::DynamicProgramming(int length, vector<int> price)
8+
DynamicProgramming::DynamicProgramming(vector<int> price)
99
{
10-
this->_length = length;
1110
this->_price = price;
11+
this->_totalLength = this->_price.size();
1212
}
1313

1414
int DynamicProgramming::RecursiveRodCutting(int length)
@@ -29,13 +29,13 @@ namespace RodCutting
2929
return result;
3030
}
3131

32-
pair<int, vector<int>> DynamicProgramming::DpGetMaximumProfitWithCuts()
32+
pair<int, vector<int>> DynamicProgramming::DpGetMaximumProfitWithCuts(int length)
3333
{
3434
vector<int> dp(this->_price.size() + 1, 0);
3535
this->_cutPositions = vector<int>(this->_price.size() + 1, 0);
3636

3737
// Find maximum value for all rod of length i.
38-
for (int i = 1; i <= this->_length; i++)
38+
for (int i = 1; i <= this->_totalLength; i++)
3939
{
4040
for (int j = 1; j <= i; j++)
4141
{
@@ -48,8 +48,14 @@ namespace RodCutting
4848
}
4949

5050
// Re-construct the cuts
51+
vector<int> cutLengths;
52+
int currentLength = length;
53+
while (currentLength > 0)
54+
{
55+
cutLengths.push_back(this->_cutPositions[currentLength] + 1);
56+
currentLength -= cutLengths.back();
57+
}
5158

52-
53-
return { dp[this->_length] ,{} };
59+
return { dp[length] ,cutLengths };
5460
}
5561
}

test/0005_DynamicProgramming/0001_RodCuttingTest.cc

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,32 @@ namespace RodCutting
99
TEST(DpRodCutting, RecursiveTest)
1010
{
1111
// Arrange
12+
vector<int> price = { 1, 5, 8, 9, 10, 17, 17, 20, 24, 30 };
1213
int length = 8;
13-
vector<int> price = { 1, 5, 8, 9, 10, 17, 17, 20 };
14-
DynamicProgramming dp(length, price);
14+
DynamicProgramming dp(price);
1515
int expectedResult = 22;
1616

1717
// Act
1818
int actualResult = dp.RecursiveRodCutting(length);
1919

2020
// Assert
21-
EXPECT_EQ(actualResult, expectedResult);
21+
ASSERT_EQ(actualResult, expectedResult);
2222
}
2323

2424
TEST(DpRodCutting, DpTest)
2525
{
2626
// Arrange
27+
vector<int> price = { 1, 5, 8, 9, 10, 17, 17, 20, 24, 30 };
2728
int length = 8;
28-
vector<int> price = { 1, 5, 8, 9, 10, 17, 17, 20 };
29-
DynamicProgramming dp(length, price);
30-
int expectedResult = 22;
29+
DynamicProgramming dp(price);
30+
int expectedProfit = 22;
31+
vector<int> expectedCuts = { 2, 6 };
3132

3233
// Act
33-
pair<int, vector<int>> actualResult = dp.DpGetMaximumProfitWithCuts();
34+
pair<int, vector<int>> actualResult = dp.DpGetMaximumProfitWithCuts(length);
3435

3536
// Assert
36-
EXPECT_EQ(actualResult.first, expectedResult);
37+
ASSERT_EQ(actualResult.first, expectedProfit);
38+
ASSERT_EQ(actualResult.second, expectedCuts);
3739
}
3840
}

0 commit comments

Comments
 (0)