Skip to content

Commit f2b5da5

Browse files
Merge pull request youngyangyang04#1492 from KingArthur0205/master
添加 1049.最后一块石头的重量II.md C语言解法
2 parents 0b25121 + ed3f6a0 commit f2b5da5

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

problems/1049.最后一块石头的重量II.md

+31
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,37 @@ var lastStoneWeightII = function (stones) {
277277
};
278278
```
279279

280+
C版本
281+
```c
282+
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
283+
284+
int getSum(int *stones, int stoneSize) {
285+
int sum = 0, i;
286+
for (i = 0; i < stoneSize; ++i)
287+
sum += stones[i];
288+
return sum;
289+
}
290+
291+
int lastStoneWeightII(int* stones, int stonesSize){
292+
int sum = getSum(stones, stonesSize);
293+
int target = sum / 2;
294+
int i, j;
295+
296+
// 初始化dp数组
297+
int *dp = (int*)malloc(sizeof(int) * (target + 1));
298+
memset(dp, 0, sizeof(int) * (target + 1));
299+
for (j = stones[0]; j <= target; ++j)
300+
dp[j] = stones[0];
301+
302+
// 递推公式:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i])
303+
for (i = 1; i < stonesSize; ++i) {
304+
for (j = target; j >= stones[i]; --j)
305+
dp[j] = MAX(dp[j], dp[j - stones[i]] + stones[i]);
306+
}
307+
return sum - dp[target] - dp[target];
308+
}
309+
```
310+
280311
281312
TypeScript版本
282313

0 commit comments

Comments
 (0)