목록분류 전체보기 (310)
가오리의 코딩일기
n = int(input()) dp = [i for i in range(n+1)] for i in range(1, n+1): for j in range(1, i): if j*j > i: break if dp[i] > dp[i-j*j]+1: dp[i] = dp[i-j*j]+1 print(dp[n])
n = int(input()) score = [0] for _ in range(n): score.append(int(input())) if n == 1: print(score[1]) else: dp = [0]*(n+1) dp[1] = score[1] dp[2] = score[1]+score[2] for i in range(3, n+1): dp[i] = max(dp[i-3]+score[i-1]+score[i], dp[i-2]+score[i]) print(dp[n])
n = int(input()) list = list(map(int, input().split())) dp = [0]*n dp[0] = list[0] for i in range(1, n): dp[i] = max(list[i], dp[i-1]+list[i]) print(max(dp))
n = int(input()) data = list(map(int, input().split())) reverse_data = data[::-1] up = [1 for i in range(n)] down = [1 for i in range(n)] for i in range(n): for j in range(i): if data[i] > data[j]: up[i] = max(up[i], up[j]+1) if reverse_data[i] > reverse_data[j]: down[i] = max(down[i], down[j]+1) result = [0 for i in range(n)] for i in range(n): result[i] = up[i] + down[n-i-1] - 1 print(max(resu..
n = int(input()) data = list(map(int, input().split())) dp = [1] *n for i in range(n): for j in range(i): if data[j]> data[i]: dp[i] = max(dp[i], dp[j]+1) print(max(dp))
POINT - sort() : 오름차순 정렬 → first = numbers[n-1], second = numbers[n-2] - sort(reverse = True) : 내림차순 정렬 → first = numbers[0], second = numbers[1] - 가장 큰 수를 k번 더하고 두 번째로 큰 수를 1번 더하고 가장 큰 수를 k번 더하기를 반복 # 방법1 -> 내생각1 sort() 사용 n, m, k = map(int, input().split()) numbers = list(map(int, input().split())) numbers.sort() result = 0 while True: for i in range(k): if m == 0: break result += numbers[n-1]..
n = int(input()) number = list(map(int,input().split())) result = [0]*n result[0]=number[0] for i in range(1, n): for j in range(i): if number[i] > number[j]: result[i] = max(result[i], result[j]+number[i]) else: result[i] = max(result[i], number[i]) print(max(result))
n = int(input()) data = list(map(int, input().split())) dp = [1]*n for i in range(n): for j in range(i): if data[j] number[j] and result[j] > result[i]: result[i] = result[j] result[i]+=1 print(max(result))
n = int(input()) dp = [] for i in range(n): dp.append(int(input())) list0 = [0]*n list0[0] = dp[0] if n > 1: list0[1] = dp[0]+dp[1] if n > 2: list0[2] = max(dp[2]+dp[1], dp[2]+dp[0], list0[1]) for i in range(3, n): list0[i] = max(list0[i-1], list0[i-3]+dp[i-1]+dp[i], list0[i-2]+dp[i]) print(list0[n-1]) n = int(input()) array = [0] * 10000 for i in range(n): array[i] = int(input()) result = [0]*1..
T = int(input()) for i in range(T): dp = [] n = int(input()) for j in range(2): dp.append(list(map(int, input().split()))) for k in range(1, n): if k == 1: dp[0][k] += dp[1][k-1] dp[1][k] += dp[0][k-1] else: dp[0][k] += max(dp[1][k-1], dp[1][k-2]) dp[1][k] += max(dp[0][k-1], dp[0][k-2]) print(max(dp[0][n-1], dp[1][n-1])) POINT - 뗀 스티커 기준으로 왼쪽, 오른쪽, 위, 아래 스티커 사용 불가 - 점수의 합이 '최대'일 때를 구한다 dp[0][1] ..