Форум сайта python.su
0
izekiaЯ правда не знаю алгоритма, но обычно такая штука здорово выручает.
прикольно, пока писал, родилась идея, там в треугольнике числа < 100
я могу просто делать индекс на диапазоне, вместо инта :cool:
пошел пробовать
Офлайн
12
shizaага, я отпишусь по результату, а ведь казалось уже оптимизировать негде :)izekiaЯ правда не знаю алгоритма, но обычно такая штука здорово выручает.
прикольно, пока писал, родилась идея, там в треугольнике числа < 100
я могу просто делать индекс на диапазоне, вместо инта :cool:
пошел пробовать
Офлайн
12
сложил все в словарь, почти в 1.8 раза выигрыш по времени
при использовании nums в сравнении с int(x)
где-то я сегодня читал про оптимизированный словарь который в 2.5 появился
Офлайн
12
точнее в 2.4 появился defaultdict
-10% еще
Офлайн
12
черт, на сфере нет модуля collections
Офлайн
12
izekiaпоторопился, все там есть
черт, на сфере нет модуля collections
Офлайн
0
izekiaВітаю! Покажи кодizekiaпоторопился, все там есть
черт, на сфере нет модуля collections
спасибо всем, кто помогал в этой теме
окончательный мой результат: 1.26
я первый среди трех питонистов на этой задаче :cool:
Офлайн
12
Окончательный код:
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()
Офлайн
12
там количество строк может быть равным нулю, как я понял
ты, кстати, не мог бы по русски писать, я не понимаю украинского
и используй словарь из collections, он реально даст прирост производительности
а так идея алгоритма прикольная :)
правда сравнений больше получается и сложений тоже
надо сравнить
Отредактировано (Июль 23, 2008 01:35:47)
Офлайн
0
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)
Офлайн