Kaynağa Gözat

First hard problem done

master
Lachlan Jacob 5 yıl önce
ebeveyn
işleme
450d63a879
3 değiştirilmiş dosya ile 72 ekleme ve 0 silme
  1. 28
    0
      problems/1402/main.rs
  2. 39
    0
      problems/1402/problem.txt
  3. 5
    0
      problems/1402/run.sh

+ 28
- 0
problems/1402/main.rs Dosyayı Görüntüle

@@ -0,0 +1,28 @@
use std::cmp;

pub fn max_satisfaction(mut satisfaction: Vec<i32>) -> i32 {
// First we want to sort the dishes, because the maximum like-time will come
// when the last dishes are highest in number - then we just need to work out which ones to cull
// there is one case that can probably be optimised: all negative (cook nothing)
// but it might be easier to just build that into the starting logic
satisfaction.sort_by(|a, b| b.cmp(a));
let mut max = 0;
let mut sum = 0; // sum will count how much will be added by multiplying the end of the arr
// Now loop backwards over the array seeing if it makes things better to add dishes
// Note: The array has been reversed, so it's actually going forwards, trippy right?
for dish in satisfaction {
let total = max + dish + sum; // This is the total if this dish was added
if total > max {
sum = sum + dish;
max = total;
} else {
return max; // we can't do better, stop here
}
}
return cmp::max(0, max);
}

pub fn main() {
println!("Expected: 20");
println!("Got: {}", max_satisfaction(vec![4, 3, 2]));
}

+ 39
- 0
problems/1402/problem.txt Dosyayı Görüntüle

@@ -0,0 +1,39 @@
A chef has collected data on the satisfaction level of his n dishes. Chef can cook any dish in 1 unit of time.

Like-time coefficient of a dish is defined as the time taken to cook that dish including previous dishes multiplied by its satisfaction level i.e. time[i]*satisfaction[i]

Return the maximum sum of Like-time coefficient that the chef can obtain after dishes preparation.

Dishes can be prepared in any order and the chef can discard some dishes to get this maximum value.


Example 1:

Input: satisfaction = [-1,-8,0,5,-9]
Output: 14
Explanation: After Removing the second and last dish, the maximum total Like-time coefficient will be equal to (-1*1 + 0*2 + 5*3 = 14). Each dish is prepared in one unit of time.

Example 2:

Input: satisfaction = [4,3,2]
Output: 20
Explanation: Dishes can be prepared in any order, (2*1 + 3*2 + 4*3 = 20)

Example 3:

Input: satisfaction = [-1,-4,-5]
Output: 0
Explanation: People don't like the dishes. No dish is prepared.

Example 4:

Input: satisfaction = [-2,5,-1,0,3,-3]
Output: 35


Constraints:

n == satisfaction.length
1 <= n <= 500
-10^3 <= satisfaction[i] <= 10^3

+ 5
- 0
problems/1402/run.sh Dosyayı Görüntüle

@@ -0,0 +1,5 @@
#!/bin/bash

rustc main.rs
./main
rm main

Loading…
İptal
Kaydet