Форум » Массивы, сортировка, работа с файлами » Задача 40 » Ответить

Задача 40

Осипкин: Первоначально у нас получилось 9991 кг, последние грузы были массой 126, 128, 129, 131 кг. А почему нельзя поменять груз 129 кг на 138 кг? И тогда общая масса будет равна 10000 кг... Ответ: 113 10000 В чем у меня ошибка?

Ответов - 4

Осипкин: [pre2] f = open('26-39.txt','r') a=[] n,m = map(int,f.readline().split()) sn=0; s =0 for i in f: if int(i)>=310 and int(i)<=320 : sn+=1 s+=int(i) else : a.append(int(i)) a = sorted(a) i=0 while s+a[ i]<=m : sn+=1 s+=a[ i] i+=1 i-=1; n=0; sm=s while True : k=i while s-a[i-n]+a[k]<=m : k+=1 if k==i : break if s-a[i-n]+a[k-1]>sm : sm = s-a[i-n]+a[k-1] if sm==m : break n+=1 print(sn,sm) f.close()[/pre2]

Поляков: Попробуйте сравнить свое решение с авторским, которое есть на сайте (рядом с файлом с данными).

Осипкин: Автор меняет "последний" груз 131кг на максимально возможный - 139кг, добавляя всего 8кг. Но... Автор прав! В задании сказано, что главное - максимальный груз! Я же решал задачу - максимальная загрузка! Извиняюсь за неумение читать...


Осипкин: Если чуть-чуть изменить мою программу, она будет выводить и максимальный груз, и максимальную загрузку... [pre2] f = open('26-39.txt','r') a=[] n,m = map(int,f.readline().split()) sn=0; s =0 for i in f: if int(i)>=310 and int(i)<=320 : sn+=1 s+=int(i) else : a.append(int(i)) a = sorted(a) i=0 while s+a<=m : sn+=1 s+=a i+=1 i-=1; n=0; sm1=s; sm2=s while True : k=i while s-a[i-n]+a[k]<=m : k+=1 if k==i : break if n==0 : sm1 = s-a+a[k-1] # в этой строке почему-то пропадает индекс i - в предпросмотре все правильно! if s-a[i-n]+a[k-1]>sm2 : sm2 = s-a[i-n]+a[k-1] if sm2==m : break n+=1 print(sn,sm1,sm2) f.close() [/pre2]



полная версия страницы