-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLast Stone Weight II.cpp
More file actions
30 lines (29 loc) · 917 Bytes
/
Copy pathLast Stone Weight II.cpp
File metadata and controls
30 lines (29 loc) · 917 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
public:
int lastStoneWeightII(vector<int>& stones) {
int n = stones.size();
vector<vector<int>> dp(n + 1, vector<int>(3001, INT_MAX));
dp[0][0] = 0;
for (int i = 0; i < n; ++i) {
for (int diff = 0; diff <= 3000; ++diff) {
if (dp[i][diff] != INT_MAX) {
int newDiffA = abs(diff + stones[i]);
if (newDiffA <= 3000) {
dp[i + 1][newDiffA] = min(dp[i + 1][newDiffA], dp[i][diff]);
}
int newDiffB = abs(diff - stones[i]);
if (newDiffB <= 3000) {
dp[i + 1][newDiffB] = min(dp[i + 1][newDiffB], dp[i][diff]);
}
}
}
}
int result = INT_MAX;
for (int diff = 0; diff <= 3000; ++diff) {
if (dp[n][diff] != INT_MAX) {
result = min(result, diff);
}
}
return result;
}
};