CSES - Laatikot

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

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

Voit olettaa, että nn on välillä 11051 \dots 10^5 ja xx on välillä 11091 \dots 10^9. Jokaisen tavaran paino on enintään xx.

Python

Toteuta tiedostoon boxes.py funktio count, jolle annetaan tavaroiden painot sekä painoraja xx. 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 xx. 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
    }
}