program main implicit none integer*8::N,A,B,W,i,j,tmp integer*8,allocatable::D(:) integer*8,allocatable::dp(:),pdp(:) read *, N,A,B,W allocate(D(N)) allocate(dp(0:N)) allocate(pdp(0:N)) read *, D dp(0) = W + D(1) dp(1) = W - A + B*1 tmp = dp(1) do i=2,N pdp(0:i-1) = dp(0:i-1) dp(0) = tmp+ D(i) tmp = dp(0) do j=1,i dp(j) = pdp(j-1) - A + B*j tmp = MIN(tmp, dp(j)) end do end do print '(i0)', MINVAL(dp(0:N)) end program