Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit beb6805

Browse files
添加 1049.最后一块石头的重量.md C语言解法
1 parent 19abe18 commit beb6805

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,5 +277,36 @@ 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
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /