Skip to content

Commit 43db79d

Browse files
committed
feat: add solutions to lc problem: No.1799
No.1799.Maximize Score After N Operations
1 parent 78da6fc commit 43db79d

File tree

5 files changed

+145
-12
lines changed

5 files changed

+145
-12
lines changed

solution/1700-1799/1799.Maximize Score After N Operations/README.md

+48-5
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,18 @@
8484
class Solution:
8585
def maxScore(self, nums: List[int]) -> int:
8686
m = len(nums)
87+
f = [0] * (1 << m)
8788
g = [[0] * m for _ in range(m)]
8889
for i in range(m):
8990
for j in range(i + 1, m):
9091
g[i][j] = gcd(nums[i], nums[j])
91-
f = [0] * (1 << m)
9292
for k in range(1 << m):
9393
if (cnt := k.bit_count()) % 2 == 0:
9494
for i in range(m):
9595
if k >> i & 1:
9696
for j in range(i + 1, m):
9797
if k >> j & 1:
98-
f[k] = max(
99-
f[k],
100-
f[k ^ (1 << i) ^ (1 << j)] + cnt // 2 * g[i][j],
101-
)
98+
f[k] = max(f[k], f[k ^ (1 << i) ^ (1 << j)] + cnt // 2 * g[i][j])
10299
return f[-1]
103100
```
104101

@@ -219,6 +216,52 @@ func gcd(a, b int) int {
219216
}
220217
```
221218

219+
### **TypeScript**
220+
221+
```ts
222+
function maxScore(nums: number[]): number {
223+
const m = nums.length;
224+
const f: number[] = new Array(1 << m).fill(0);
225+
const g: number[][] = new Array(m).fill(0).map(() => new Array(m).fill(0));
226+
for (let i = 0; i < m; ++i) {
227+
for (let j = i + 1; j < m; ++j) {
228+
g[i][j] = gcd(nums[i], nums[j]);
229+
}
230+
}
231+
for (let k = 0; k < 1 << m; ++k) {
232+
const cnt = bitCount(k);
233+
if (cnt % 2 === 0) {
234+
for (let i = 0; i < m; ++i) {
235+
if ((k >> i) & 1) {
236+
for (let j = i + 1; j < m; ++j) {
237+
if ((k >> j) & 1) {
238+
const t =
239+
f[k ^ (1 << i) ^ (1 << j)] +
240+
~~(cnt / 2) * g[i][j];
241+
f[k] = Math.max(f[k], t);
242+
}
243+
}
244+
}
245+
}
246+
}
247+
}
248+
return f[(1 << m) - 1];
249+
}
250+
251+
function gcd(a: number, b: number): number {
252+
return b ? gcd(b, a % b) : a;
253+
}
254+
255+
function bitCount(i: number): number {
256+
i = i - ((i >>> 1) & 0x55555555);
257+
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
258+
i = (i + (i >>> 4)) & 0x0f0f0f0f;
259+
i = i + (i >>> 8);
260+
i = i + (i >>> 16);
261+
return i & 0x3f;
262+
}
263+
```
264+
222265
### **...**
223266

224267
```

solution/1700-1799/1799.Maximize Score After N Operations/README_EN.md

+48-5
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,18 @@
6565
class Solution:
6666
def maxScore(self, nums: List[int]) -> int:
6767
m = len(nums)
68+
f = [0] * (1 << m)
6869
g = [[0] * m for _ in range(m)]
6970
for i in range(m):
7071
for j in range(i + 1, m):
7172
g[i][j] = gcd(nums[i], nums[j])
72-
f = [0] * (1 << m)
7373
for k in range(1 << m):
7474
if (cnt := k.bit_count()) % 2 == 0:
7575
for i in range(m):
7676
if k >> i & 1:
7777
for j in range(i + 1, m):
7878
if k >> j & 1:
79-
f[k] = max(
80-
f[k],
81-
f[k ^ (1 << i) ^ (1 << j)] + cnt // 2 * g[i][j],
82-
)
79+
f[k] = max(f[k], f[k ^ (1 << i) ^ (1 << j)] + cnt // 2 * g[i][j])
8380
return f[-1]
8481
```
8582

@@ -198,6 +195,52 @@ func gcd(a, b int) int {
198195
}
199196
```
200197

198+
### **TypeScript**
199+
200+
```ts
201+
function maxScore(nums: number[]): number {
202+
const m = nums.length;
203+
const f: number[] = new Array(1 << m).fill(0);
204+
const g: number[][] = new Array(m).fill(0).map(() => new Array(m).fill(0));
205+
for (let i = 0; i < m; ++i) {
206+
for (let j = i + 1; j < m; ++j) {
207+
g[i][j] = gcd(nums[i], nums[j]);
208+
}
209+
}
210+
for (let k = 0; k < 1 << m; ++k) {
211+
const cnt = bitCount(k);
212+
if (cnt % 2 === 0) {
213+
for (let i = 0; i < m; ++i) {
214+
if ((k >> i) & 1) {
215+
for (let j = i + 1; j < m; ++j) {
216+
if ((k >> j) & 1) {
217+
const t =
218+
f[k ^ (1 << i) ^ (1 << j)] +
219+
~~(cnt / 2) * g[i][j];
220+
f[k] = Math.max(f[k], t);
221+
}
222+
}
223+
}
224+
}
225+
}
226+
}
227+
return f[(1 << m) - 1];
228+
}
229+
230+
function gcd(a: number, b: number): number {
231+
return b ? gcd(b, a % b) : a;
232+
}
233+
234+
function bitCount(i: number): number {
235+
i = i - ((i >>> 1) & 0x55555555);
236+
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
237+
i = (i + (i >>> 4)) & 0x0f0f0f0f;
238+
i = i + (i >>> 8);
239+
i = i + (i >>> 16);
240+
return i & 0x3f;
241+
}
242+
```
243+
201244
### **...**
202245

203246
```

solution/1700-1799/1799.Maximize Score After N Operations/Solution.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class Solution:
22
def maxScore(self, nums: List[int]) -> int:
33
m = len(nums)
4+
f = [0] * (1 << m)
45
g = [[0] * m for _ in range(m)]
56
for i in range(m):
67
for j in range(i + 1, m):
78
g[i][j] = gcd(nums[i], nums[j])
8-
f = [0] * (1 << m)
99
for k in range(1 << m):
1010
if (cnt := k.bit_count()) % 2 == 0:
1111
for i in range(m):
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
function maxScore(nums: number[]): number {
2+
const m = nums.length;
3+
const f: number[] = new Array(1 << m).fill(0);
4+
const g: number[][] = new Array(m).fill(0).map(() => new Array(m).fill(0));
5+
for (let i = 0; i < m; ++i) {
6+
for (let j = i + 1; j < m; ++j) {
7+
g[i][j] = gcd(nums[i], nums[j]);
8+
}
9+
}
10+
for (let k = 0; k < 1 << m; ++k) {
11+
const cnt = bitCount(k);
12+
if (cnt % 2 === 0) {
13+
for (let i = 0; i < m; ++i) {
14+
if ((k >> i) & 1) {
15+
for (let j = i + 1; j < m; ++j) {
16+
if ((k >> j) & 1) {
17+
const t =
18+
f[k ^ (1 << i) ^ (1 << j)] +
19+
~~(cnt / 2) * g[i][j];
20+
f[k] = Math.max(f[k], t);
21+
}
22+
}
23+
}
24+
}
25+
}
26+
}
27+
return f[(1 << m) - 1];
28+
}
29+
30+
function gcd(a: number, b: number): number {
31+
return b ? gcd(b, a % b) : a;
32+
}
33+
34+
function bitCount(i: number): number {
35+
i = i - ((i >>> 1) & 0x55555555);
36+
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
37+
i = (i + (i >>> 4)) & 0x0f0f0f0f;
38+
i = i + (i >>> 8);
39+
i = i + (i >>> 16);
40+
return i & 0x3f;
41+
}

solution/2100-2199/2106.Maximum Fruits Harvested After at Most K Steps/Solution.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@ def maxTotalFruits(self, fruits: List[List[int]], startPos: int, k: int) -> int:
33
ans = i = s = 0
44
for j, (pj, fj) in enumerate(fruits):
55
s += fj
6-
while i <= j and pj - fruits[i][0] + min(abs(startPos - fruits[i][0]), abs(startPos - fruits[j][0])) > k:
6+
while (
7+
i <= j
8+
and pj
9+
- fruits[i][0]
10+
+ min(abs(startPos - fruits[i][0]), abs(startPos - fruits[j][0]))
11+
> k
12+
):
713
s -= fruits[i][1]
814
i += 1
915
ans = max(ans, s)

0 commit comments

Comments
 (0)