File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed
Dynamic_Programming/1049.Last-Stone-Weight-II Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int lastStoneWeightII (vector<int >& stones)
4
+ {
5
+ int sum = accumulate (stones.begin (), stones.end (), 0 );
6
+ vector<int >dp (2 *sum+2 , false );
7
+ int offset = sum;
8
+
9
+ dp[stones[0 ]+offset] = 1 ;
10
+ dp[-stones[0 ]+offset] = 1 ;
11
+
12
+ for (int i=1 ; i<stones.size (); i++)
13
+ {
14
+ vector<int >dp2 (2 *sum+2 , false );
15
+ for (int s = -sum; s<= sum; s++)
16
+ {
17
+ if (s-stones[i] >= -sum && s-stones[i] <= sum)
18
+ dp2[s+offset] = dp2[s+offset] || dp[s-stones[i]+offset];
19
+ if (s+stones[i] >= -sum && s+stones[i] <= sum)
20
+ dp2[s+offset] = dp2[s+offset] || dp[s+stones[i]+offset];
21
+ }
22
+ dp = std::move (dp2);
23
+ }
24
+
25
+ for (int s = 0 ; s<=sum; s++)
26
+ if (dp[s+offset])
27
+ return s;
28
+ return 0 ;
29
+ }
30
+ };
You can’t perform that action at this time.
0 commit comments