CSES - Laatikot

Tehtäväsi on pakata n tavaraa laatikoihin. Jokaisessa laatikossa voi olla yksi tai kaksi tavaraa, ja lisäksi laatikon tavaroiden yhteispaino saa olla enintään x. Mikä on pienin mahdollinen laatikoiden määrä?

Esimerkiksi kun tavaroiden painot ovat [7,2,3,9] ja x=10, tarvitset ainakin 3 laatikkoa. Yksi ratkaisu on pakata yhteen laatikkoon tavarat, joiden painot ovat 7 ja 2, ja muut tavarat omiin laatikoihin.

Voit olettaa, että n on välillä 1 \dots 10^5 ja x on välillä 1 \dots 10^9. Jokaisen tavaran paino on enintään x.

Python

Toteuta tiedostoon boxes.py funktio count, jolle annetaan tavaroiden painot sekä painoraja x. Funktion tulee palauttaa tarvittava laatikoiden määrä.

def count(t,x):
    # TODO

if __name__ == "__main__":
    print(count([1,2,3,4],10)) # 2
    print(count([4,4,4,4],5)) # 4
    print(count([7,2,3,9],10)) # 3
    print(count([4,2,1,5,3],6)) # 3

Java

Toteuta tiedostoon Boxes.java metodi count, jolle annetaa tavaroiden painot sekä painoraja x. Funktion tulee palauttaa tarvittava laatikoiden määrä.

public class Boxes {
    public int count(int[] t, int x) {
        // TODO
    }

    public static void main(String[] args) {
        Boxes b = new Boxes();
        System.out.println(b.count(new int[] {1,2,3,4}, 10)); // 2
        System.out.println(b.count(new int[] {4,4,4,4}, 4)); // 4
        System.out.println(b.count(new int[] {7,2,3,9}, 10)); // 3
        System.out.println(b.count(new int[] {4,2,1,5,3}, 6)); // 3
    }
}