Skip to content

Commit f3459fe

Browse files
authored
feat: add solutions to lc problems: No.3332,3334 (#3677)
* No.3332.Maximum Points Tourist Can Earn * No.3334.Find the Maximum Factor Score of Array
1 parent 3799d97 commit f3459fe

File tree

14 files changed

+649
-12
lines changed

14 files changed

+649
-12
lines changed

solution/3300-3399/3332.Maximum Points Tourist Can Earn/README.md

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,25 +81,116 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3300-3399/3332.Ma
8181
#### Python3
8282

8383
```python
84-
84+
class Solution:
85+
def maxScore(
86+
self, n: int, k: int, stayScore: List[List[int]], travelScore: List[List[int]]
87+
) -> int:
88+
f = [[-inf] * n for _ in range(k + 1)]
89+
f[0] = [0] * n
90+
for i in range(1, k + 1):
91+
for j in range(n):
92+
for h in range(n):
93+
f[i][j] = max(
94+
f[i][j],
95+
f[i - 1][h]
96+
+ (stayScore[i - 1][j] if j == h else travelScore[h][j]),
97+
)
98+
return max(f[k])
8599
```
86100

87101
#### Java
88102

89103
```java
90-
104+
class Solution {
105+
public int maxScore(int n, int k, int[][] stayScore, int[][] travelScore) {
106+
int[][] f = new int[k + 1][n];
107+
for (var g : f) {
108+
Arrays.fill(g, Integer.MIN_VALUE);
109+
}
110+
Arrays.fill(f[0], 0);
111+
for (int i = 1; i <= k; ++i) {
112+
for (int j = 0; j < n; ++j) {
113+
for (int h = 0; h < n; ++h) {
114+
f[i][j] = Math.max(
115+
f[i][j], f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]));
116+
}
117+
}
118+
}
119+
return Arrays.stream(f[k]).max().getAsInt();
120+
}
121+
}
91122
```
92123

93124
#### C++
94125

95126
```cpp
96-
127+
class Solution {
128+
public:
129+
int maxScore(int n, int k, vector<vector<int>>& stayScore, vector<vector<int>>& travelScore) {
130+
int f[k + 1][n];
131+
memset(f, 0xc0, sizeof(f));
132+
memset(f[0], 0, sizeof(f[0]));
133+
for (int i = 1; i <= k; ++i) {
134+
for (int j = 0; j < n; ++j) {
135+
for (int h = 0; h < n; ++h) {
136+
f[i][j] = max(f[i][j], f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]));
137+
}
138+
}
139+
}
140+
return *max_element(f[k], f[k] + n);
141+
}
142+
};
97143
```
98144
99145
#### Go
100146
101147
```go
148+
func maxScore(n int, k int, stayScore [][]int, travelScore [][]int) (ans int) {
149+
f := make([][]int, k+1)
150+
for i := range f {
151+
f[i] = make([]int, n)
152+
for j := range f[i] {
153+
f[i][j] = math.MinInt32
154+
}
155+
}
156+
for j := 0; j < n; j++ {
157+
f[0][j] = 0
158+
}
159+
for i := 1; i <= k; i++ {
160+
for j := 0; j < n; j++ {
161+
f[i][j] = f[i-1][j] + stayScore[i-1][j]
162+
for h := 0; h < n; h++ {
163+
if h != j {
164+
f[i][j] = max(f[i][j], f[i-1][h]+travelScore[h][j])
165+
}
166+
}
167+
}
168+
}
169+
for j := 0; j < n; j++ {
170+
ans = max(ans, f[k][j])
171+
}
172+
return
173+
}
174+
```
102175

176+
#### TypeScript
177+
178+
```ts
179+
function maxScore(n: number, k: number, stayScore: number[][], travelScore: number[][]): number {
180+
const f: number[][] = Array.from({ length: k + 1 }, () => Array(n).fill(-Infinity));
181+
f[0].fill(0);
182+
for (let i = 1; i <= k; ++i) {
183+
for (let j = 0; j < n; ++j) {
184+
for (let h = 0; h < n; ++h) {
185+
f[i][j] = Math.max(
186+
f[i][j],
187+
f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]),
188+
);
189+
}
190+
}
191+
}
192+
return Math.max(...f[k]);
193+
}
103194
```
104195

105196
<!-- tabs:end -->

solution/3300-3399/3332.Maximum Points Tourist Can Earn/README_EN.md

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,25 +78,116 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3300-3399/3332.Ma
7878
#### Python3
7979

8080
```python
81-
81+
class Solution:
82+
def maxScore(
83+
self, n: int, k: int, stayScore: List[List[int]], travelScore: List[List[int]]
84+
) -> int:
85+
f = [[-inf] * n for _ in range(k + 1)]
86+
f[0] = [0] * n
87+
for i in range(1, k + 1):
88+
for j in range(n):
89+
for h in range(n):
90+
f[i][j] = max(
91+
f[i][j],
92+
f[i - 1][h]
93+
+ (stayScore[i - 1][j] if j == h else travelScore[h][j]),
94+
)
95+
return max(f[k])
8296
```
8397

8498
#### Java
8599

86100
```java
87-
101+
class Solution {
102+
public int maxScore(int n, int k, int[][] stayScore, int[][] travelScore) {
103+
int[][] f = new int[k + 1][n];
104+
for (var g : f) {
105+
Arrays.fill(g, Integer.MIN_VALUE);
106+
}
107+
Arrays.fill(f[0], 0);
108+
for (int i = 1; i <= k; ++i) {
109+
for (int j = 0; j < n; ++j) {
110+
for (int h = 0; h < n; ++h) {
111+
f[i][j] = Math.max(
112+
f[i][j], f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]));
113+
}
114+
}
115+
}
116+
return Arrays.stream(f[k]).max().getAsInt();
117+
}
118+
}
88119
```
89120

90121
#### C++
91122

92123
```cpp
93-
124+
class Solution {
125+
public:
126+
int maxScore(int n, int k, vector<vector<int>>& stayScore, vector<vector<int>>& travelScore) {
127+
int f[k + 1][n];
128+
memset(f, 0xc0, sizeof(f));
129+
memset(f[0], 0, sizeof(f[0]));
130+
for (int i = 1; i <= k; ++i) {
131+
for (int j = 0; j < n; ++j) {
132+
for (int h = 0; h < n; ++h) {
133+
f[i][j] = max(f[i][j], f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]));
134+
}
135+
}
136+
}
137+
return *max_element(f[k], f[k] + n);
138+
}
139+
};
94140
```
95141
96142
#### Go
97143
98144
```go
145+
func maxScore(n int, k int, stayScore [][]int, travelScore [][]int) (ans int) {
146+
f := make([][]int, k+1)
147+
for i := range f {
148+
f[i] = make([]int, n)
149+
for j := range f[i] {
150+
f[i][j] = math.MinInt32
151+
}
152+
}
153+
for j := 0; j < n; j++ {
154+
f[0][j] = 0
155+
}
156+
for i := 1; i <= k; i++ {
157+
for j := 0; j < n; j++ {
158+
f[i][j] = f[i-1][j] + stayScore[i-1][j]
159+
for h := 0; h < n; h++ {
160+
if h != j {
161+
f[i][j] = max(f[i][j], f[i-1][h]+travelScore[h][j])
162+
}
163+
}
164+
}
165+
}
166+
for j := 0; j < n; j++ {
167+
ans = max(ans, f[k][j])
168+
}
169+
return
170+
}
171+
```
99172

173+
#### TypeScript
174+
175+
```ts
176+
function maxScore(n: number, k: number, stayScore: number[][], travelScore: number[][]): number {
177+
const f: number[][] = Array.from({ length: k + 1 }, () => Array(n).fill(-Infinity));
178+
f[0].fill(0);
179+
for (let i = 1; i <= k; ++i) {
180+
for (let j = 0; j < n; ++j) {
181+
for (let h = 0; h < n; ++h) {
182+
f[i][j] = Math.max(
183+
f[i][j],
184+
f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]),
185+
);
186+
}
187+
}
188+
}
189+
return Math.max(...f[k]);
190+
}
100191
```
101192

102193
<!-- tabs:end -->
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int maxScore(int n, int k, vector<vector<int>>& stayScore, vector<vector<int>>& travelScore) {
4+
int f[k + 1][n];
5+
memset(f, 0xc0, sizeof(f));
6+
memset(f[0], 0, sizeof(f[0]));
7+
for (int i = 1; i <= k; ++i) {
8+
for (int j = 0; j < n; ++j) {
9+
for (int h = 0; h < n; ++h) {
10+
f[i][j] = max(f[i][j], f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]));
11+
}
12+
}
13+
}
14+
return *max_element(f[k], f[k] + n);
15+
}
16+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
func maxScore(n int, k int, stayScore [][]int, travelScore [][]int) (ans int) {
2+
f := make([][]int, k+1)
3+
for i := range f {
4+
f[i] = make([]int, n)
5+
for j := range f[i] {
6+
f[i][j] = math.MinInt32
7+
}
8+
}
9+
for j := 0; j < n; j++ {
10+
f[0][j] = 0
11+
}
12+
for i := 1; i <= k; i++ {
13+
for j := 0; j < n; j++ {
14+
f[i][j] = f[i-1][j] + stayScore[i-1][j]
15+
for h := 0; h < n; h++ {
16+
if h != j {
17+
f[i][j] = max(f[i][j], f[i-1][h]+travelScore[h][j])
18+
}
19+
}
20+
}
21+
}
22+
for j := 0; j < n; j++ {
23+
ans = max(ans, f[k][j])
24+
}
25+
return
26+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int maxScore(int n, int k, int[][] stayScore, int[][] travelScore) {
3+
int[][] f = new int[k + 1][n];
4+
for (var g : f) {
5+
Arrays.fill(g, Integer.MIN_VALUE);
6+
}
7+
Arrays.fill(f[0], 0);
8+
for (int i = 1; i <= k; ++i) {
9+
for (int j = 0; j < n; ++j) {
10+
for (int h = 0; h < n; ++h) {
11+
f[i][j] = Math.max(
12+
f[i][j], f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]));
13+
}
14+
}
15+
}
16+
return Arrays.stream(f[k]).max().getAsInt();
17+
}
18+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def maxScore(
3+
self, n: int, k: int, stayScore: List[List[int]], travelScore: List[List[int]]
4+
) -> int:
5+
f = [[-inf] * n for _ in range(k + 1)]
6+
f[0] = [0] * n
7+
for i in range(1, k + 1):
8+
for j in range(n):
9+
for h in range(n):
10+
f[i][j] = max(
11+
f[i][j],
12+
f[i - 1][h]
13+
+ (stayScore[i - 1][j] if j == h else travelScore[h][j]),
14+
)
15+
return max(f[k])
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function maxScore(n: number, k: number, stayScore: number[][], travelScore: number[][]): number {
2+
const f: number[][] = Array.from({ length: k + 1 }, () => Array(n).fill(-Infinity));
3+
f[0].fill(0);
4+
for (let i = 1; i <= k; ++i) {
5+
for (let j = 0; j < n; ++j) {
6+
for (let h = 0; h < n; ++h) {
7+
f[i][j] = Math.max(
8+
f[i][j],
9+
f[i - 1][h] + (j == h ? stayScore[i - 1][j] : travelScore[h][j]),
10+
);
11+
}
12+
}
13+
}
14+
return Math.max(...f[k]);
15+
}

0 commit comments

Comments
 (0)