#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> li(n, vector<int>(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int r, g, b;
cin >> r >> g >> b;
li[i][j] = 2126 * r + 7152 * g + 722 * b;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (li[i][j] < 510000)
cout << (char)35;
else if (li[i][j] < 1020000)
cout << (char)111;
else if (li[i][j] < 1530000)
cout << (char)43;
else if (li[i][j] < 2040000)
cout << (char)45;
else cout << (char)46;
}
cout << endl;
}
return 0;
}
from sys import stdin
n = int(input())
m = int(input())
location = list(map(int, stdin.readline().split()))
gap = []
gap.append((location[0] - 0) * 2)
for i in range(1, m):
gap.append(location[i] - location[i - 1])
gap.append((n - location[-1]) * 2)
a, b = divmod(max(gap), 2)
if b == 0:
print(a)
else:
print(a + 1)
from sys import stdin
n, p = list(map(int, stdin.readline().split()))
w, l, g = list(map(int, stdin.readline().split()))
win = []
lose = []
for i in range(p):
name, what = stdin.readline().split()
if what == 'W':
win.append(name)
else:
lose.append(name)
li = []
sum = 0
flag = False
for i in range(n):
n = input()
if n in win:
sum += w
else:
if sum - l >= 0:
sum -= l
else:
sum = 0
if sum >= g:
print("I AM NOT IRONMAN!!")
flag = True
break
if not flag:
print("I AM IRONMAN!!")
n = int(input())
from sys import stdin
li = []
for i in range(n):
li.append(list(map(int, stdin.readline().split())))
sum = []
import collections
q = collections.deque()
q.append((0, 0, li[0][0]))
while q:
cur = q.popleft()
if cur[0] == n - 1:
sum.append(cur[2])
else:
q.append((cur[0] + 1, cur[1], cur[2] + li[cur[0] + 1][cur[1]]))
q.append((cur[0] + 1, cur[1] + 1, cur[2] + li[cur[0] + 1][cur[1] + 1]))
print(max(sum))
메모리 초과로 실패
그래서 삼각형 아랫쪽부터 위로 올라오는 방식으로 동적계획법을 사용한 코드로 바꾸었다.
n = int(input())
from sys import stdin
li = []
for i in range(n):
li.append(list(map(int, stdin.readline().split())))
li[i].extend([0] * (n - 1 - i))
for i in range(n - 2, -1, -1):
for j in range(i + 1):
li[i][j] = max(li[i][j] + li[i + 1][j], li[i][j] + li[i + 1][j + 1])
print(li[0][0])
from sys import stdin
n, l = list(map(int, stdin.readline().split()))
li = []
for i in range(n):
li.append(list(map(int, stdin.readline().split())))
count = 0
for i in range(n):
previous = -1
seq = []
maximum = -1
for j in range(n):
if j == 0:
maximum = li[i][j]
seq.append([li[i][j], 1])
else:
if li[i][j] > maximum:
maximum = li[i][j]
if previous == li[i][j]:
seq[-1][1] = seq[-1][1] + 1
else:
seq.append([li[i][j], 1])
previous = li[i][j]
if len(seq) == 1:
count += 1
elif n / l < len(seq):
pass
else:
for k in range(len(seq)):
if k > 0 and abs(seq[k - 1][0] - seq[k][0]) != 1:
break
elif seq[k][0] != maximum and seq[k][1] < l:
break
elif 0 < k < len(seq) - 1:
if seq[k - 1][0] > seq[k][0] and seq[k + 1][0] > seq[k][0] and seq[k][1] < l * 2:
break
else:
if k == len(seq) - 1:
count += 1
for i in range(n):
previous = -1
seq = []
maximum = -1
for j in range(n):
if j == 0:
maximum = li[j][i]
seq.append([li[j][i], 1])
else:
if li[j][i] > maximum:
maximum = li[j][i]
if previous == li[j][i]:
seq[-1][1] = seq[-1][1] + 1
else:
seq.append([li[j][i], 1])
previous = li[j][i]
if len(seq) == 1:
count += 1
elif n / l < len(seq):
pass
else:
for k in range(len(seq)):
if k > 0 and abs(seq[k - 1][0] - seq[k][0]) > 1:
break
elif seq[k][0] != maximum and seq[k][1] < l:
break
elif 0 < k < len(seq) - 1:
if seq[k - 1][0] > seq[k][0] and seq[k + 1][0] > seq[k][0] and seq[k][1] < l * 2:
break
else:
if k == len(seq) - 1:
count += 1
print(count)