PROGRAM MAIN IMPLICIT NONE INTEGER :: L, N, I, J, TMP, COUNT = 0, WIDTH = 0 INTEGER, ALLOCATABLE :: W(:) READ *, L READ *, N ALLOCATE(W(N)) READ *, W(:) ! 小さいものから順番に入れていけばよいのでは? ! そうでもないのかしら ! とりあえずソートする。 DO I = 0, N - 1 DO J = 1, N - 1 - I IF (W(J) > W(J + 1)) THEN TMP = W(J+1) W(J+1) = W(J) W(J) = TMP END IF END DO END DO ! PRINT *, W(:) DO WHILE (WIDTH <= L .AND. COUNT < N) IF (WIDTH + W(COUNT + 1) <= L) THEN COUNT = COUNT + 1 WIDTH = WIDTH + W(COUNT) ELSE EXIT END IF END DO PRINT *, COUNT END PROGRAM MAIN