diff --git a/solution/0500-0599/0568.Maximum Vacation Days/README.md b/solution/0500-0599/0568.Maximum Vacation Days/README.md index 0b759e9bf93c8..c482a1c70a038 100644 --- a/solution/0500-0599/0568.Maximum Vacation Days/README.md +++ b/solution/0500-0599/0568.Maximum Vacation Days/README.md @@ -98,7 +98,7 @@ Ans = 7 + 7 + 7 = 21 我们定义 $f[k][j]$ 表示前 $k$ 周,且最后一周在城市 $j$ 休假的最长天数。初始时 $f[0][0]=0$,其它 $f[0][j]=-\infty$。答案为 $\max_{j=0}^{n-1} f[K][j]$。 -接下来,我们考虑如何计算 $f[k][j]$。对于当前这一周,我们可以枚举上一周所在的城市 $i$,城市 $i$ 可以和城市 $j$ 相等,那么 $f[k][j] = f[k-1][i]$;也可以和城市 $j$ 不相等,如果不相等,我们需要判断是否可以从城市 $i$ 飞到城市 $j$,如果可以,那么 $f[k][j] = max(f[k][j], f[k-1][i])$。最后,我们还需要加上这一周在城市 $j$ 休假的天数 $days[j][k-1]$。 +接下来,我们考虑如何计算 $f[k][j]$。对于当前这一周,我们可以枚举上一周所在的城市 $i$,城市 $i$ 可以和城市 $j$ 相等,那么 $f[k][j] = f[k-1][i]$;也可以和城市 $j$ 不相等,如果不相等,我们需要判断是否可以从城市 $i$ 飞到城市 $j$,如果可以,那么 $f[k][j] = \max(f[k][j], f[k-1][i])$。最后,我们还需要加上这一周在城市 $j$ 休假的天数 $\textit{days}[j][k-1]$。 最终的答案即为 $\max_{j=0}^{n-1} f[K][j]$。 @@ -220,6 +220,59 @@ func maxVacationDays(flights [][]int, days [][]int) (ans int) { } ``` +#### TypeScript + +```ts +function maxVacationDays(flights: number[][], days: number[][]): number { + const n = flights.length; + const K = days[0].length; + const inf = Number.NEGATIVE_INFINITY; + const f: number[][] = Array.from({ length: K + 1 }, () => Array(n).fill(inf)); + f[0][0] = 0; + for (let k = 1; k <= K; k++) { + for (let j = 0; j < n; j++) { + f[k][j] = f[k - 1][j]; + for (let i = 0; i < n; i++) { + if (flights[i][j]) { + f[k][j] = Math.max(f[k][j], f[k - 1][i]); + } + } + f[k][j] += days[j][k - 1]; + } + } + return Math.max(...f[K]); +} +``` + +#### Rust + +```rust +impl Solution { + pub fn max_vacation_days(flights: Vec<Vec<i32>>, days: Vec<Vec<i32>>) -> i32 { + let n = flights.len(); + let k = days[0].len(); + let inf = i32::MIN; + + let mut f = vec![vec![inf; n]; k + 1]; + f[0][0] = 0; + + for step in 1..=k { + for j in 0..n { + f[step][j] = f[step - 1][j]; + for i in 0..n { + if flights[i][j] == 1 { + f[step][j] = f[step][j].max(f[step - 1][i]); + } + } + f[step][j] += days[j][step - 1]; + } + } + + *f[k].iter().max().unwrap() + } +} +``` + <!-- tabs:end --> <!-- solution:end --> diff --git a/solution/0500-0599/0568.Maximum Vacation Days/README_EN.md b/solution/0500-0599/0568.Maximum Vacation Days/README_EN.md index 03606fb98ba45..76fc29b6c73be 100644 --- a/solution/0500-0599/0568.Maximum Vacation Days/README_EN.md +++ b/solution/0500-0599/0568.Maximum Vacation Days/README_EN.md @@ -211,6 +211,59 @@ func maxVacationDays(flights [][]int, days [][]int) (ans int) { } ``` +#### TypeScript + +```ts +function maxVacationDays(flights: number[][], days: number[][]): number { + const n = flights.length; + const K = days[0].length; + const inf = Number.NEGATIVE_INFINITY; + const f: number[][] = Array.from({ length: K + 1 }, () => Array(n).fill(inf)); + f[0][0] = 0; + for (let k = 1; k <= K; k++) { + for (let j = 0; j < n; j++) { + f[k][j] = f[k - 1][j]; + for (let i = 0; i < n; i++) { + if (flights[i][j]) { + f[k][j] = Math.max(f[k][j], f[k - 1][i]); + } + } + f[k][j] += days[j][k - 1]; + } + } + return Math.max(...f[K]); +} +``` + +#### Rust + +```rust +impl Solution { + pub fn max_vacation_days(flights: Vec<Vec<i32>>, days: Vec<Vec<i32>>) -> i32 { + let n = flights.len(); + let k = days[0].len(); + let inf = i32::MIN; + + let mut f = vec![vec![inf; n]; k + 1]; + f[0][0] = 0; + + for step in 1..=k { + for j in 0..n { + f[step][j] = f[step - 1][j]; + for i in 0..n { + if flights[i][j] == 1 { + f[step][j] = f[step][j].max(f[step - 1][i]); + } + } + f[step][j] += days[j][step - 1]; + } + } + + *f[k].iter().max().unwrap() + } +} +``` + <!-- tabs:end --> <!-- solution:end --> diff --git a/solution/0500-0599/0568.Maximum Vacation Days/Solution.rs b/solution/0500-0599/0568.Maximum Vacation Days/Solution.rs new file mode 100644 index 0000000000000..2483954a7ad16 --- /dev/null +++ b/solution/0500-0599/0568.Maximum Vacation Days/Solution.rs @@ -0,0 +1,24 @@ +impl Solution { + pub fn max_vacation_days(flights: Vec<Vec<i32>>, days: Vec<Vec<i32>>) -> i32 { + let n = flights.len(); + let k = days[0].len(); + let inf = i32::MIN; + + let mut f = vec![vec![inf; n]; k + 1]; + f[0][0] = 0; + + for step in 1..=k { + for j in 0..n { + f[step][j] = f[step - 1][j]; + for i in 0..n { + if flights[i][j] == 1 { + f[step][j] = f[step][j].max(f[step - 1][i]); + } + } + f[step][j] += days[j][step - 1]; + } + } + + *f[k].iter().max().unwrap() + } +} diff --git a/solution/0500-0599/0568.Maximum Vacation Days/Solution.ts b/solution/0500-0599/0568.Maximum Vacation Days/Solution.ts new file mode 100644 index 0000000000000..23f7d25974af5 --- /dev/null +++ b/solution/0500-0599/0568.Maximum Vacation Days/Solution.ts @@ -0,0 +1,19 @@ +function maxVacationDays(flights: number[][], days: number[][]): number { + const n = flights.length; + const K = days[0].length; + const inf = Number.NEGATIVE_INFINITY; + const f: number[][] = Array.from({ length: K + 1 }, () => Array(n).fill(inf)); + f[0][0] = 0; + for (let k = 1; k <= K; k++) { + for (let j = 0; j < n; j++) { + f[k][j] = f[k - 1][j]; + for (let i = 0; i < n; i++) { + if (flights[i][j]) { + f[k][j] = Math.max(f[k][j], f[k - 1][i]); + } + } + f[k][j] += days[j][k - 1]; + } + } + return Math.max(...f[K]); +}