Форум сайта python.su
izekiaЯ правда не знаю алгоритма, но обычно такая штука здорово выручает.
прикольно, пока писал, родилась идея, там в треугольнике числа < 100
я могу просто делать индекс на диапазоне, вместо инта :cool:
пошел пробовать
Офлайн
shizaага, я отпишусь по результату, а ведь казалось уже оптимизировать негде :)izekiaЯ правда не знаю алгоритма, но обычно такая штука здорово выручает.
прикольно, пока писал, родилась идея, там в треугольнике числа < 100
я могу просто делать индекс на диапазоне, вместо инта :cool:
пошел пробовать
Офлайн
сложил все в словарь, почти в 1.8 раза выигрыш по времени
при использовании nums в сравнении с int(x)
где-то я сегодня читал про оптимизированный словарь который в 2.5 появился
Офлайн
точнее в 2.4 появился defaultdict
-10% еще
Офлайн
черт, на сфере нет модуля collections
Офлайн
izekiaпоторопился, все там есть
черт, на сфере нет модуля collections
Офлайн
izekiaВітаю! Покажи кодizekiaпоторопился, все там есть
черт, на сфере нет модуля collections
спасибо всем, кто помогал в этой теме
окончательный мой результат: 1.26
я первый среди трех питонистов на этой задаче :cool:
Офлайн
Окончательный код:
import psyco
psyco.full()
from collections import defaultdict
def main():
nums = defaultdict(int)
for x in range(100):
nums[str(x)] = x
casesCount=input()
for caseNum in range(casesCount):
rowCount=input()
triangle=[]
for i in range(rowCount):
triangle+=[[nums[x] for x in raw_input().split()]]
for i in range(rowCount - 2, -1, -1):
for j in range(i+1):
triangle[i][j]+= triangle[i+1][j] > triangle[i+1][j+1] and triangle[i+1][j] or triangle[i+1][j+1]
print rowCount == 0 and '0' or triangle[0][0]
main()
Офлайн
там количество строк может быть равным нулю, как я понял
ты, кстати, не мог бы по русски писать, я не понимаю украинского
и используй словарь из collections, он реально даст прирост производительности
а так идея алгоритма прикольная :)
правда сравнений больше получается и сложений тоже
надо сравнить
Отредактировано (Июль 23, 2008 01:35:47)
Офлайн
try faster ;) 1.02
import psyco
psyco.full()
import sys
rinput = sys.stdin.readline
routput = sys.stdout.write
def main():
cache = dict([(str(i), i) for i in range(100)])
for i in range(input()):
num_of_rows = input()
prev_line = [cache[rinput().rstrip()]]
last_line = []
for j in range(1, num_of_rows):
last_line = [cache[x] for x in rinput().rstrip().split()]
for z in range(len(last_line)):
if z:
x = z if z < len(prev_line) else z - 1
plx = prev_line[x]
last_line[z] += prev_line[z - 1] if prev_line[z - 1] >= plx else plx
else:
last_line[0] += prev_line[0]
prev_line = last_line
routput(str(max(last_line or prev_line)) + '\n')
main()
Отредактировано (Июль 23, 2008 01:51:40)
Офлайн