Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,55 @@
|
|||
program KNAPSACK_CONTINUOUS
|
||||
implicit none
|
||||
|
||||
real, parameter :: maxweight = 15.0
|
||||
real :: total_weight = 0, total_value = 0, frac
|
||||
integer :: i, j
|
||||
|
||||
type Item
|
||||
character(7) :: name
|
||||
real :: weight
|
||||
real :: value
|
||||
end type Item
|
||||
|
||||
type(Item) :: items(9), temp
|
||||
|
||||
items(1) = Item("beef", 3.8, 36.0)
|
||||
items(2) = Item("pork", 5.4, 43.0)
|
||||
items(3) = Item("ham", 3.6, 90.0)
|
||||
items(4) = Item("greaves", 2.4, 45.0)
|
||||
items(5) = Item("flitch", 4.0, 30.0)
|
||||
items(6) = Item("brawn", 2.5, 56.0)
|
||||
items(7) = Item("welt", 3.7, 67.0)
|
||||
items(8) = Item("salami", 3.0, 95.0)
|
||||
items(9) = Item("sausage", 5.9, 98.0)
|
||||
|
||||
! sort items in descending order of their value per unit weight
|
||||
do i = 2, size(items)
|
||||
j = i - 1
|
||||
temp = items(i)
|
||||
do while (j>=1 .and. items(j)%value / items(j)%weight < temp%value / temp%weight)
|
||||
items(j+1) = items(j)
|
||||
j = j - 1
|
||||
end do
|
||||
items(j+1) = temp
|
||||
end do
|
||||
|
||||
i = 0
|
||||
write(*, "(a4, a13, a6)") "Item", "Weight", "Value"
|
||||
do while(i < size(items) .and. total_weight < maxweight)
|
||||
i = i + 1
|
||||
if(total_weight+items(i)%weight < maxweight) then
|
||||
total_weight = total_weight + items(i)%weight
|
||||
total_value = total_value + items(i)%value
|
||||
write(*, "(a7, 2f8.2)") items(i)
|
||||
else
|
||||
frac = (maxweight-total_weight) / items(i)%weight
|
||||
total_weight = total_weight + items(i)%weight * frac
|
||||
total_value = total_value + items(i)%value * frac
|
||||
write(*, "(a7, 2f8.2)") items(i)%name, items(i)%weight * frac, items(i)%value * frac
|
||||
end if
|
||||
end do
|
||||
|
||||
write(*, "(f15.2, f8.2)") total_weight, total_value
|
||||
|
||||
end program KNAPSACK_CONTINUOUS
|
||||
Loading…
Add table
Add a link
Reference in a new issue