Skip to content

Commit e574800

Browse files
committed
daily but too slow
1 parent 8e442c2 commit e574800

File tree

4 files changed

+113
-10
lines changed

4 files changed

+113
-10
lines changed

.idea/workspace.xml

Lines changed: 35 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/dailies/d20_12_13.rs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
2+
3+
struct Solution;
4+
5+
//problem 312
6+
use std::collections::HashMap;
7+
impl Solution {
8+
pub fn max_coins(nums: Vec<i32>) -> i32 {
9+
if nums.is_empty(){
10+
return 0;
11+
}
12+
let mut dp = HashMap::new();
13+
Solution::max_coins_recurse(&nums, &mut dp)
14+
}
15+
16+
fn max_coins_recurse(nums: &[i32], dp: &mut HashMap<Vec<i32>, i32>) -> i32 {
17+
match nums.len() {
18+
1 => nums[0],
19+
2 => nums[0] * nums[1] + nums[0].max(nums[1]),
20+
_ => {
21+
let mut max = 0;
22+
for i in 0..nums.len() {
23+
let slice = [&nums[0..i], &nums[i + 1..]].concat() as Vec<i32>;
24+
25+
let mut score = 1;
26+
if i != 0 {
27+
score *= nums[i - 1];
28+
}
29+
score *= nums[i];
30+
if i != (nums.len() - 1) {
31+
score *= nums[i + 1];
32+
}
33+
34+
if dp.contains_key(&slice) {
35+
score += dp[&slice];
36+
} else {
37+
let sub_score = Solution::max_coins_recurse(&slice, dp);
38+
dp.insert(slice, sub_score);
39+
score += sub_score;
40+
}
41+
if score > max {
42+
max = score;
43+
}
44+
}
45+
max
46+
}
47+
}
48+
}
49+
}
50+
51+
#[cfg(test)]
52+
mod tests {
53+
use crate::dailies::d20_12_13::Solution;
54+
use std::collections::HashMap;
55+
56+
#[test]
57+
fn it_works() {
58+
let foo = Solution::max_coins(vec![8,3,4,3,5,0,5,6,6,2,8,5,6,2,3,8,3,5,1,0,2]);
59+
}
60+
61+
#[test]
62+
fn test_map_array() {
63+
let mut map:HashMap<Vec<i32>,bool> = HashMap::new();
64+
let mut vec = vec![1,2];
65+
map.insert(vec, true);
66+
assert_eq!(map[&vec![1,2]], true);
67+
//assert_eq!(map[vec], true);
68+
}
69+
}
70+
71+
// 1 -> 1 n => n
72+
// 32 -> 6 + 3 = 9 xy => x*y + max(x,y)
73+
// 723 -> xyz => x*y*z + dp[x,z]
74+
// 992 -> 178 + 18 + 9 || 18 + 89 + 9 || 89 + 18 + 9

src/dailies/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
//mod d20_12_9;
22
//mod d20_12_10;
33
//mod d20_12_11;
4-
//mod d20_12_12;
4+
//mod d20_12_12;
5+
mod d20_12_13;

src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ mod weeklies;
1212
//mod p0007;
1313
//mod p0008;
1414
//mod p0009;
15-
mod p0010;
15+
//mod p0010;
1616

1717

1818
fn main() {
19-
let test = p0010::Solution::is_match("".to_string(),".*".to_string());
19+
//let test = p0010::Solution::is_match("".to_string(),".*".to_string());
2020
println!("{}","");
2121
}

0 commit comments

Comments
 (0)