n = int(input()) nums = list(map(int, input().split())) defquick_sort(l, r): if l >= r: return i, j = l - 1, r + 1 x = nums[l + r >> 1] while i < j: whileTrue: i += 1 if nums[i] >= x: break whileTrue: j -= 1 if nums[j] <= x: break if i < j: nums[i], nums[j] = nums[j], nums[i] quick_sort(l, j) quick_sort(j + 1, r) quick_sort(0, n - 1) print(*nums)
n, k = map(int, input().split()) nums = list(map(int, input().split())) defquick_select(l, r, k): if l >= r: return nums[l] x = nums[(l + r) // 2] i, j = l - 1, j + 1 while i < j: whileTrue: i += 1 if nums[i] <= x: break whileTrue: j -= 1 if nums[j] >= x: break if i < j: nums[i], nums[j] = nums[j], nums[i] sl = j - l + 1 if k <= sl: return quick_select(l, j, k) else: return quick_select(j + 1, r, k - sl) print(quick_select(0, n - 1, k))
n, q = map(int, input().split()) nums = [int(x) for x ininput().split()] while q > 0: q -= 1 x = int(input()) l, r = 0, n - 1 while l < r: mid = (l + r) // 2 if nums[mid] >= x: r = mid else: l = mid + 1 if nums[l] != x: print('-1 -1') continue left = l l, r = 0, n - 1 while l < r: mid = (l + r + 1) // 2 if nums[mid] <= x: l = mid else: r = mid - 1 print(f'{left}{l}')
n, m = map(int, input().split()) nums = [0] + list(map(int, input().split())) diffs = [0] * (n + 2) definsert(l, r, c): diffs[l] += c diffs[r + 1] -= c for i inrange(1, n + 1): insert(i, i, nums[i]) for _ inrange(m): l, r, c = map(int, input().split()) insert(l, r, c) for i inrange(1, n + 1): nums[i] = nums[i - 1] + diffs[i] print(nums[i], end=' ')
n, m, x = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) j = m - 1 for i inrange(n): while j and a[i] + b[j] > x: j -= 1 if a[i] + b[j] == x: print(i, j) break
n, m = map(int, input().split()) # adds = [list(map(int, input().split())) for _ in range(n)] # querys = [list(map(int, input().split())) for _ in range(m)] # indexs = [add[0] for add in adds] # for l, r in querys: # indexs += [l, r] adds, querys, indexs = [], [], [] for i inrange(n): x, c = map(int, input().split()) adds.append([x, c]) indexs.append(x) for i inrange(m): l, r = map(int, input().split()) querys.append([l, r]) indexs.append(l) indexs.append(r) indexs.sort() indexs = list(set(indexs)) n = len(indexs) deffind(x): l, r = 0, n - 1 while l < r: mid = l + r >> 1 if indexs[mid] >= x: r = mid else: l = mid + 1 return l + 1
nums = [0] * (n + 1) sums = [0] * (n + 1) for x, c in adds: nums[find(x)] += c for i inrange(1, n + 1): sums[i] = sums[i - 1] + nums[i] for l, r in querys: print(sums[find(r)] - sums[find(l) - 1])
n = int(input()) nums = [list(map(int, input().split())) for _ inrange(n)] nums.sort(key=lambda x: x[0]) st, ed = float('-inf'), float('-inf') res = 0 for l, r in nums: if ed < l: res += 1 st = l ed = r else: ed = max(ed, r) print(res)
definsert_head(x): global head, idx e[idx] = x ne[idx] = head head = idx idx += 1 definsert(k, x): global idx e[idx] = x ne[idx] = ne[k] ne[k] = idx idx += 1 defremove(k): ne[k] = ne[ne[k]] N = 100010 e, ne = [0] * N, [0] * N head, idx = -1, 0 n = int(input()) for _ inrange(n): ops = input().split() if ops[0] == 'H': insert_head(int(ops[1])) elif ops[0] == 'I': insert(int(ops[1]) - 1, int(ops[2])) else: k = int(ops[1]) ifnot k: head = ne[head] remove(k - 1) i = head res = [] while i != -1: res.append(e[i]) i = ne[i] print(' '.join(map(str, res)))
dic = {'(': 0, '+': 1, '-': 1, '*': 2, '/': 2} ops, nums = [], [] defnew_eval(): b = nums.pop() a = nums.pop() o = ops.pop() if o == '+': nums.append(a + b) elif o == '-': nums.append(a - b) elif o == '*': nums.append(a * b) elif o == '/': nums.append(int(a / b)) a = input() n = len(a) i = 0 while i < n: c = a[i] if c.isdigit(): j, x = i, 0 while j < n and a[j].isdigit(): x = x * 10 + int(a[j]) j += 1 i = j - 1 nums.append(x) elif c == '(': ops.append(c) elif c == ')': while ops[-1] != '(': new_eval() ops.pop() else: while ops and dic[ops[-1]] >= dic[c]: new_eval() ops.append(c) i += 1 while ops: new_eval() print(nums[-1])
n = int(input()) nums = list(map(int, input().split())) stack, res = [], [] for num in nums: ifnot stack: stack.append(num) res.append(-1) continue while stack and num <= stack[-1]: stack.pop() ifnot stack: res.append(-1) else: res.append(stack[-1]) stack.append(num) print(' '.join(map(str, res)))
n, k = map(int, input().split()) nums = list(map(int, input().split())) q = [0] * 1000010 hh, tt = 0, -1 res1, res2 = [], [] for i inrange(n): if hh <= tt and i - k + 1 > q[hh]: hh += 1 while hh <= tt and nums[q[tt]] > nums[i]: tt -= 1 tt += 1 q[tt] = i if i >= k - 1: res1.append(nums[q[hh]]) hh, tt = 0, -1 for i inrange(n): if hh <= tt and i - k + 1 > q[hh]: hh += 1 while hh <= tt and nums[q[tt]] < nums[i]: tt -= 1 tt += 1 q[tt] = i if i >= k - 1: res2.append(nums[q[hh]]) print(' '.join(map(str, res1))) print(' '.join(map(str, res2)))
N = 10010 tries = [[0] * 26for _ inrange(N)] cnt = [0] * N idx = 1 definsert(string): global idx p = 0 for char in string: t = ord(char) - 97 ifnot tries[p][t]: tries[p][t] = idx idx += 1 p = tries[p][t] cnt[p] += 1 defquery(string): p = 0 for char in string: t = ord(char) - 97 ifnot tries[p][t]: return0 p = tries[p][t] return cnt[p] n = int(input()) for _ inrange(n): op, string = input().split() if op == 'I': insert(string) elif op == 'Q': print(query(string))
N = 100010 M = 31 * N tries = [[0] * 2for _ inrange(M)] n = int(input()) nums = list(map(int, input().split())) idx, res = 0, 0 definsert(x): global idx p = 0 for i inrange(32)[::-1]: u = x >> i & 1 ifnot tries[p][u]: idx += 1 tries[p][u] = idx p = tries[p][u] defquery(x): p, res = 0, 0 for i inrange(32)[::-1]: u = x >> i & 1 if tries[p][u^1]: res = res * 2 + u^1 p = tries[p][u^1] else: res = res * 2 + u p = tries[p][u] return res for num in nums: insert(num) t = query(num) res = max(res, t^num) print(res)
n, m = map(int, input().split()) p = [i for i inrange(n + 1)] deffind(x): if p[x] != x: p[x] = find(p[x]) return p[x] for _ inrange(m): op, a, b = input().split() a, b = int(a), int(b) if op == 'M': p[find(a)] = find(b) elif op == 'Q': if find(a) == find(b): print('Yes') else: print('No')
n, m = map(int, input().split()) p, d = [i for i inrange(n + 1)], [0] * (n + 1) res = 0 deffind(x): if p[x] != x: t = find(p[x]) d[x] += d[p[x]] p[x] = t return p[x] for _ inrange(m): op, x, y = map(int, input().split()) if x > n or y > n: res += 1 continue px, py = find(x), find(y) diff = (d[x] - d[y]) % 3 if op == 1: if px == py and diff: res += 1 else: p[px] = p[y] d[px] = d[y] - d[x] elif op == 2: if px == py and diff != 1: res += 1 else: p[px] = p[y] d[px] = d[y] - d[x] + 1 print(res)
n, m = map(int, input().split()) heap = [0] + list(map(int, input().split())) defdown(k): t = k if2 * k <= n and heap[2 * k] < heap[t]: t = 2 * k if2 * k + 1 <= n and heap[2 * k + 1] < heap[t]: t = 2 * k + 1 if t != k: heap[t], heap[k] = heap[k], heap[t] down(t) for i inrange(int(n / 2), -1, -1): down(i) for _ inrange(m): print(heap[1], end=' ') heap[1] = heap[n] n -= 1 down(1)
N = 100003 h, e, ne = [-1] * N, [0] * N, [0] * N n = int(input()) idx = 0 definsert(x): global idx k = x % N e[idx] = x ne[idx] = h[k] h[k] = idx idx += 1 deffind(x): k = x % N i = h[k] while i != -1: if e[i] == x: returnTrue i = ne[i] returnFalse for _ inrange(n): op, x = input().split() if op == 'I': insert(int(x)) elif op == 'Q': if find(int(x)): print('Yes') else: print('No')
N = 200003 null = 0x3f3f3f3f h = [null] * N n = int(input()) deffind(x): k = x % N while h[k] != null and h[k] != x: k += 1 if k == N: k = 0 return k for _ inrange(n): op, x = input().split() k = find(int(x)) if op == 'I': h[k] = int(x) elif op == 'Q': if h[k] == int(x): print('Yes') else: print('No')
python 自带
1 2 3 4 5 6 7 8 9
from collections import defaultdict dic = defaultdict(int) n = int(input()) for _ inrange(n): op, x = input().split() if op == 'I': dic[x] += 1 elif op == 'Q': print('Yes'if dic[x] else'No')
n = int(input()) path = [0] * n st = [False] * (n + 1) defdfs(x): if x == n: print(' '.join(map(str, path))) return for i inrange(1, n + 1): ifnot st[i]: path[x] = i st[i] = True dfs(x + 1) st[i] = False dfs(0)
python permutation方法
1 2 3 4 5
import itertools n = int(input()) nums = [i for i inrange(1, n + 1)] for res in itertools.permutations(nums, n): print(' '.join(map(str, res)))
from collections import deque n, m = map(int, input().split()) g = [list(map(int, input().split())) for _ inrange(n)] path = [[-1] * m for _ inrange(n)] prev = [[0] * m for _ inrange(n)] q = deque() q.append((0, 0)) path[0][0] = 0 while q: a, b = q.popleft() for l, r in ((0, 1), (1, 0), (0, -1), (-1, 0)): x = a + l y = b + r if0 <= x < n and0 <= y < m andnot g[x][y] and path[x][y] == -1: q.append((x, y)) path[x][y] = path[a][b] + 1 prev[x][y] = (a, b) print(path[-1][-1]) x, y = n - 1, m - 1 while x > 0or y > 0: x,y = prev[x][y] print(x,y)
n = int(input()) h, e, ne = [-1] * (n + 1), [0] * (2 * n), [0] * (2 * n) state = [False] * (n + 1) idx, ans = 0, n defadd(a, b): global idx idx += 1 e[idx] = b ne[idx] = h[a] h[a] = idx defdfs(u): global ans state[u] = True size, res = 1, 0 cur = h[u] while cur != -1: j = e[cur] ifnot state[j]: s = dfs(j) res = max(res, s) size += s cur = ne[cur] res = max(res, n - size) ans = min(ans, res) return size for _ inrange(n - 1): a, b = map(int, input().split()) add(a, b) add(b, a) dfs(1) print(ans)
n = int(input()) adj_list = [[] for _ inrange(n + 1)] state = [False] * (n + 1) ans = n for _ inrange(n - 1): a, b = map(int, input().split()) adj_list[a].append(b) adj_list[b].append(a) defdfs(u): global ans state[u] = True size, res = 1, 0 for j in adj_list[u]: ifnot state[j]: s = dfs(j) res = max(res, s) size += s res = max(res, n - size) ans = min(ans, res) return size dfs(1) print(ans)
from collections import deque n, m = map(int, input().split()) adj_list = [[] for _ inrange(n + 1)] d = [0] * (n + 1) queue = deque([1]) for _ inrange(m): a, b = map(int, input().split()) adj_list[a].append(b) defbfs(): while queue: cur = queue.popleft() distance = d[cur] if cur == n: return distance for j in adj_list[cur]: ifnot d[j]: d[j] = distance + 1 queue.append(j) return -1 print(bfs())
n, m, k = map(int, input().split()) e = [] dist = [float('inf')] * (n + 1) dist[1] = 0 for _ inrange(m): a, b, c = map(int, input().split()) e.append((a, b, c)) for _ inrange(k): backup = dist.copy() for a, b, w in e: dist[b] = min(dist[b], backup[a] + w) print(dist[n] if dist[n] != float('inf') else'impossible')
n, m, q = map(int, input().split()) g = [[float('inf')] * (n + 1) for _ inrange(n + 1)] for i inrange(1, n + 1): g[i][i] = 0 for _ inrange(m): a, b, c = map(int, input().split()) g[a][b] = min(g[a][b], c) for k inrange(1, n + 1): for i inrange(1, n + 1): for j inrange(1, n + 1): g[i][j] = min(g[i][j], g[i][k] + g[k][j]) for _ inrange(q): a, b = map(int, input().split()) print(g[a][b] if g[a][b] != float('inf') else'impossible')
n, m = map(int, input().split()) g = [[float('inf')] * (n + 1) for _ inrange(n + 1)] state = [False] * (n + 1) dist = [float('inf')] * (n + 1) for _ inrange(m): a, b, c = map(int, input().split()) g[a][b] = min(g[a][b], c) g[b][a] = g[a][b] defprim(): res = 0 for i inrange(n): t = min((j for j inrange(1, n + 1) ifnot state[j]), key = lambda x: dist[x]) if i and dist[t] == float('inf'): return'impossible' if i: res += dist[t] for j inrange(1, n + 1): dist[j] = min(dist[j], g[t][j]) state[t] = True return res print(prim())
n, m = map(int, input().split()) e = [] p = [i for i inrange(n + 1)] res, cnt = 0, 0 deffind(x): if p[x] != x: p[x] = find(p[x]) return p[x] for _ inrange(m): a, b, c = map(int, input().split()) e.append((a, b, c)) e.sort(key=lambda x: x[2]) for a, b, c in e: a, b = find(a), find(b) if a != b: p[a] = b res += c cnt += 1 print(res if cnt == n - 1else'impossible')
n, m = map(int, input().split()) adj_list = [[] for _ inrange(n + 1)] color = [0] * (n + 1) for _ inrange(m): a, b = map(int, input().split()) adj_list[a].append(b) adj_list[b].append(a) defdfs(u, c): color[u] = c for neighbor in adj_list[u]: ifnot color[neighbor]: ifnot dfs(neighbor, c * -1): returnFalse elif color[neighbor] == c: returnFalse returnTrue for i inrange(1, n + 1): ifnot colort[i]: ifnot dfs(i, 1): print('No') break else: print('Yes')
from collections import deque n, m = map(int, input().split()) adj_list = [[] for _ inrange(n + 1)] color = [0] * (n + 1) for _ inrange(m): a, b = map(int, input().split()) adj_list[a].append(b) adj_list[b].append(a) defbfs(u): queue = deque() queue.append((u, 1)) while queue: node, c = queue.popleft() color[node] = c for neighbor in adj_list[node]: ifnot color[neighbor]: queue.append((neighbor, c * -1)) elif color[neighbor] == c: returnFalse returnTrue for i inrange(1, n + 1): ifnot color[i]: ifnot bfs(i): print('No') break else: print('Yes')
n1, n2, m = map(int, input().split()) n = max(n1, n2) adj_list = [[] for _ inrange(n + 1)] match = [0] * (n + 1) for _ inrange(m): a, b = map(int, input().split()) adj_list[a].append(b) deffind(u): for neighbor in adj_list[u]: ifnot state[neighbor]: state[neighbor] = True ifnotmatch[neighbor] or find(match[neighbor]): match[neighbor] = u returnTrue returnFalse res = 0 for i inrange(1, n1 + 1): state = [0] * (n + 1) if find(i): res += 1 print(res)
import math n = int(input()) defprime(x): if x < 2: returnFalse for i inrange(2, int(math.sqrt(x) + 1)): if x % i == 0: returnFalse returnTrue for _ inrange(n): x = int(input()) print('Yes'if prime(x) else'No')
import math n = int(input()) defdivid(x): for i inrange(2, int(math.sqrt(x) + 1)): if x % i == 0: s = 0 while x % i == 0: x //= i s += 1 print(i, s) if x > 1: print(x, 1) for _ inrange(n): x = int(input()) divid(x) print()
n = int(input()) state = [True] * (n + 1) res = [] for i inrange(2, n + 1): if state[i]: res.append(i) j = 0 while res[j] * i <= n: state[res[j] * i] = False if i % res[j] == 0: break j += 1 print(len(res))
埃氏筛法O(n lognlogn)
1 2 3 4 5 6 7 8 9
n = int(input()) state = [True] * (n + 1) res = 0 for i inrange(2, n + 1): if state[i]: res += 1 for j inrange(2 * i, n + 1, i): state[j] = False print(res)
import math n = int(input()) defdivisor(x): res = [] for i inrange(1, int(math.sqrt(x) + 1)): if x % i == 0: res.append(i) if i * i != x: res.append(x // i) res.sort() print(' '.join(map(str, res))) for _ inrange(n): a = int(input()) divisor(a)
import math n = int(input()) dict = {} defdivisor(x): for i inrange(2, int(math.sqrt(x) + 1)): while x % i == 0: x //= i dict[i] = dict.get(i, 0) + 1 if x > 1: dict[x] = dict.get(x, 0) + 1 for _ inrange(n): x = int(input()) divisor(x) res = 1 for v indict.values(): res = res * (v + 1) % (1e9 + 7) print(int(res))
import math n = int(input()) dict = {} MOD = int(1e9 + 7) defdivisor(x): for i inrange(2, int(math.sqrt(x) + 1)): while x % i == 0: x //= i dict[i] = dict.get(i, 0) + 1 if x > 1: dict[x] = dict.get(x, 0) + 1 for _ inrange(n): x = int(input()) divisor(x) res = 1 for p, a indict.items(): t = 1 while a: t = (t * p + 1) % MOD a -= 1 res = res * t % MOD print(res)
当n不是质数:$\varphi(n) = n * \sum^{x}{i=1}(1 - \frac{1}{p{k}})$
当n是质数:$\varphi(n) = n - 1$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import math n = int(input()) defeuler(x): res = x for i inrange(2, int(math.sqrt(x) + 1)): if x % i == 0: res *= (1 - 1 / i) while x % i == 0: x //= i if x > 1: res *= (1 - 1 / x) print(int(res)) for _ inrange(n): x = int(input()) euler(x)
n = int(input()) defquick_mi(a, k, p): res = 1 while k: if k & 1: res = res * a % p k >>= 1 a = a * a % p return res for _ inrange(n): a, p = map(int, input().split()) print(quick_mi(a, p - 2, p) if a % p else'impossible')
当$b \neq 0$时$x = y \prime, \quad y = x \prime - \lfloor\frac{a}{b}\rfloor * y \prime$
1 2 3 4 5 6 7 8 9 10
n = int(input()) defexgcd(a, b): ifnot b: return1, 0 y, x = exgcd(b, a % b) y -= a // b * x return x, y for _ inrange(n): a, b = map(int, input().split()) print(*exgcd(a, b))
n = int(input()) defexgcd(a, b): ifnot b: return a, 1, 0 d, y, x = exgcd(b, a % b) y -= a // b * x return d, x, y for _ inrange(n): a, b, m = map(int, input().split()) d, x, _ = exgcd(a, m) print('impossible'if b % d else x * b // d % m)
n = int(input()) g = [list(map(float, input().split())) for _ inrange(n)] defgauss(): idx, zero = 0, 1e-6 for c inrange(n): t = max(range(c, n), key=lambda x: abs(g[x][c])) ifabs(g[t][c]) < zero: continue g[idx][c:], g[t][c:] = g[t][c:], g[idx][c:] for i inrange(n, c, -1): g[idx][i] /= g[idx][c] for i inrange(idx + 1, n): ifabs(g[i][c]) > zero: for j inrange(n, c - 1, -1): g[i][j] -= g[idx][j] * g[i][c] idx += 1 if idx < n: for i inrange(idx, n): ifabs(g[i][n]) > zero: print('No solution') return print('Infinite group solutions') return for i inrange(n - 1, -1, -1): for j inrange(i + 1, n): g[i][n] -= g[i][j] * g[j][n] for i inrange(n): print(f'{g[i][n]:.2f}') gauss()
n = int(input()) g = [list(map(int, input().split())) for _ inrange(n)] defgauss(): idx = 0 for c inrange(n): t = idx for i inrange(idx, n): if g[i][c]: t = i break ifnot g[t][c]: continue g[t][c:], g[idx][c:] = g[idx][c:], g[t][c:] for i inrange(idx + 1, n): if g[i][c]: for j inrange(c, n + 1): g[i][j] ^= g[idx][j] idx += 1 if idx < n: for i inrange(idx, n): if g[i][n]: print('No solution') return print('Multiple sets of solutions') return for i inrange(n - 1, -1, -1): for j inrange(i + 1, n): g[i][n] ^= g[i][j] & g[j][n] for i inrange(n): print(g[i][n]) gauss()
n = int(input()) N, MOD = 2010, int(1e9+7) g = [[1] + [0] * N for _ inrange(N)] for i inrange(N): for j inrange(i + 1): g[i][j] = (g[i - 1][j] + g[i - 1][j - 1]) % MOD for _ inrange(n): a, b = map(int, input().split()) print(g[a][b])
n = int(input()) N, MOD = 100010, int(1e9 + 7) fact, infact = [1] * N, [1] * N defqmi(a, k, p): res = 1 while k: if k & 1: res = res * a % p k >>= 1 a = a * a % p return res for i inrange(1, N): fact[i] = fact[i - 1] * i % MOD infact[i] = infact[i - 1] * qmi(i, MOD - 2, MOD) % MOD for _ inrange(n): a, b = map(int, input().split()) print(fact[a] * infact[b] * infact[a - b] % MOD)
n = int(input()) defqmi(a, k, p): res = 1 while k: if k & 1: res = res * a % p k >>= 1 a = a * a % p return res defC(a, b): res = 1 i, j = 1, a while i <= b: res = res * j % p res = res * qmi(i, p - 2, p) % p i += 1 j -= 1 return res deflucas(a, b, p): if a < p and b < p: return C(a, b) else: return C(a % p, b % p) * lucas(a // p, b // p, p) % p for _ inrange(n): a, b, p = map(int, input().split()) print(lucas(a, b, p))
n = int(input()) p = int(1e9 + 7) defqmi(a, k, p): res = 1 while k: if k & 1: res = res * a % p k >>= 1 a = a * a % p return res res = 1 i, j = 1, 2 * n while i <= n: res = res * j % p res = res * qmi(i, p - 2, p) % p i += 1 j -= 1 print(res * qmi(n + 1, p - 2, p) % p)
使用公式+python硬解(很慢)
1 2 3
import math n = int(input()) print(math.factorial(2 * n) // (math.factorial(n) ** 2 * (n + 1)) % int(1e9 + 7))
n, m = map(int, input().split()) p = list(map(int, input().split())) res = 0 for i inrange(1, 1 << m): t, s = 1, 0 for j inrange(m): if i >> j & 1: if t * p[j] > n: break t *= p[j] s += 1 else: if s & 1: res += n // t else: res -= n // t print(res)
k = int(input()) s = list(map(int, input().split())) n = int(input()) nums = list(map(int, input().split())) f = [-1] * 10010 defsg(x): if f[x] != -1: return f[x] S = {sg(x - i) for i in s if x >= i} i = 0 while i in S: i += 1 f[x] = i return f[x] defnim(n, nums): res = 0 for num in nums: res ^= sg(num) return res print('Yes'if nim(n, nums) else'No')
n = int(input()) nums = list(map(int, input().split())) f = [-1] * 101 defsg(x): if f[x] != -1: return f[x] s = set() for i inrange(x): for j inrange(i + 1): s.add(sg(i) ^ sg(j)) i = 0 while i in s: i += 1 f[x] = i return f[x] defnim(n, nums): res = 0 for num in nums: res ^= sg(num) return res print('Yes'if nim(n, nums) else'No')
n, m = map(int, input().split()) v, w = [0] * (n + 1), [0] * (n + 1) f = [[0] * (m + 1) for _ inrange(n + 1)] for i inrange(1, n + 1): a, b = map(int, input().split()) v[i] = a w[i] = b for i inrange(1, n + 1): for j inrange(1, m + 1): f[i][j] = f[i - 1][j] if j >= v[i]: f[i][j] = max(f[i][j], f[i - 1][j - v[i]] + w[i]) print(f[n][m])
一维dp
1 2 3 4 5 6 7 8 9 10 11
n, m = map(int, input().split()) v, w = [0] * (n + 1), [0] * (n + 1) f = [0] * (m + 1) for i inrange(1, n + 1): a, b = map(int, input().split()) v[i] = a w[i] = b for i inrange(1, n + 1): for j inrange(m, v[i] - 1, -1): f[j] = max(f[j], f[j - v[i]] + w[i]) print(f[m])
n, m = map(int, input().split()) v, w = [0] * (n + 1), [0] * (n + 1) f = [[0] * (m + 1) for _ inrange(n + 1)] for i inrange(1, n + 1): a, b = map(int, input().split()) v[i] = a w[i] = b for i inrange(1, n + 1): for j inrange(1, m + 1): f[i][j] = f[i - 1][j] if j >= v[i]: f[i][j] = max(f[i][j], f[i][j - v[i]] + w[i]) print(f[n][m])
一维dp
1 2 3 4 5 6 7 8 9 10 11 12
n, m = map(int, input().split()) v, w = [0] * (n + 1), [0] * (n + 1) f = [0] * (m + 1) for i inrange(1, n + 1): a, b = map(int, input().split()) v[i] = a w[i] = b for i inrange(1, n + 1): for j inrange(1, m + 1): if j >= v[i]: f[j] = max(f[j], f[j - v[i]] + w[i]) print(f[m])
n, m = map(int, input().split()) v, w, s = [0] * (n + 1), [0] * (n + 1), [0] * (n + 1) f = [[0] * (m + 1) for _ inrange(n + 1)] for i inrange(1, n + 1): a, b, c = map(int, input().split()) v[i] = a w[i] = b s[i] = c for i inrange(1, n + 1): for j inrange(1, m + 1): f[i][j] = f[i - 1][j] k = 0 while k <= s[i] and j >= k * v[i]: f[i][j] = max(f[i][j], f[i - 1][j - k * v[i]] + k * w[i]) k += 1 print(f[n][m])
n, m = map(int, input().split()) N = 20010 v, w, f = [0] * (N + 1), [0] * (N + 1), [0] * (N + 1) idx = 1 for _ inrange(n): a, b, c = map(int, input().split()) k = 1 while k < c: v[idx] = a * k w[idx] = b * k c -= k k *= 2 idx += 1 if c: v[idx] = a * c w[idx] = b * c idx += 1 for i inrange(1, idx): for j inrange(m, v[i] - 1, -1): f[j] = max(f[j], f[j - v[i]] + w[i]) print(f[m])
n, m = map(int, input().split()) N = 101 v = [[0] * N for _ inrange(N)] w = [[0] * N for _ inrange(N)] s, f = [0] * N, [0] * N for i inrange(1, n + 1): s[i] = int(input()) for j inrange(1, s[i] + 1): v[i][j], w[i][j] = map(int, input().split()) for i inrange(1, n + 1): for j inrange(m, 0, -1): for k inrange(1, s[i] + 1): if j >= v[i][k]: f[j] = max(f[j], f[j - v[i][k]] + w[i][k]) print(f[m])
n = int(input()) a = [0] + list(map(int, input().split())) f = [1] * (n + 1) for i inrange(1, n + 1): for j inrange(1, i): if a[i] > a[j]: f[i] = max(f[i], f[j] + 1) print(max(f))
n = int(input()) a = ' ' + input() m = int(input()) b = ' ' + input() f = [[0] * (m + 1) for _ inrange(n + 1)] for i inrange(1, n + 1): f[i][0] = i for i inrange(1, m + 1): f[0][i] = i for i inrange(1, n + 1): for j inrange(1, m + 1): if a[i] == b[j]: f[i][j] = min(f[i - 1][j] + 1, f[i][j - 1] + 1, f[i - 1][j - 1]) else: f[i][j] = min(f[i - 1][j], f[i][j - 1], f[i - 1][j - 1]) + 1 print(f[n][m])
n, m = map(int, input().split()) N = 11 a = [[0] * N for _ inrange(n + 1)] f = [[0] * N for _ inrange(N)] for i inrange(n): a[i] = ' ' + input() defdistance(a, b): la, lb = len(a), len(b) for i inrange(1, la): f[i][0] = i for i inrange(1, lb): f[0][i] = i for i inrange(1, la): for j inrange(1, lb): if a[i] == b[j]: f[i][j] = min(f[i - 1][j] + 1, f[i][j - 1] + 1, f[i - 1][j - 1]) else: f[i][j] = min(f[i - 1][j], f[i][j - 1], f[i - 1][j - 1]) + 1 return f[la - 1][lb - 1] for _ inrange(m): b, limit = input().split() b, limit = ' ' + b, int(limit) res = 0 for i inrange(n): if distance(a[i], b) <= limit: res += 1 print(res)
n = int(input()) a = list(map(int, input().split())) q = [0] * (n + 1) res = 0 for i inrange(n): l, r = 0, res while l < r: mid = l + r + 1 >> 1 if q[mid] < a[i]: l = mid else: r = mid - 1 q[r + 1] = a[i] res = max(res, r + 1) print(res)
n = int(input()) s = [0] + list(map(int, input().split())) f = [[0] * (n + 1) for _ inrange(n + 1)] for i inrange(1, n + 1): s[i] += s[i - 1] for length inrange(2, n + 1): for i inrange(1, n - length + 2): l, r = i, i + length - 1 f[l][r] = float('inf') for k inrange(l, r): f[l][r] = min(f[l][r], f[l][k] + f[k + 1][r] + s[r] - s[l - 1]) print(f[1][n])
n = int(input()) MOD = int(1e9 + 7) f = [0] * (n + 1) f[0] = 1 for i inrange(1, n + 1): for j inrange(i, n + 1): f[j] = (f[j] + f[j - i]) % MOD print(f[n])
defpower10(x): res = 1 while x: res *= 10 x -= 1 return res defcount(n, x): res = cnt = 0 m = n while m: cnt += 1 m //= 10 for i inrange(1, cnt + 1): r = power10(i - 1) l = n // (r * 10) if x: res += l * r else: res += (l - 1) * r d = n // r % 10 if d == x: res += n % r + 1 elif d > x: res += r return res whileTrue: a, b = map(int, input().split()) ifnot a andnot b: break if a > b: a, b = b, a for i inrange(10): print(count(b, i) - count(a - 1, i), end=' ') print()
n = int(input()) g = [list(map(int, input().split())) for _ inrange(n)] f = [[float('inf')] * n for _ inrange(1 << n)] f[1][0] = 0 for i inrange(1 << n): for j inrange(n): if i >> j & 1: for k inrange(n): if i >> k & 1: f[i][j] = min(f[i][j], f[i - (1 << j)][k] + g[k][j]) print(f[i - (1 << n)][n - 1])
n, m = map(int, input().split()) f = [[0] * m for _ inrange(n)] g = [list(map(int, input().split())) for _ inrange(n)] dircts = [(0, 1), (1, 0), (0, -1), (-1, 0)] defdp(x, y): if f[x][y]: return f[x][y] f[x][y] = 1 for l, r in dircts: a, b = x + l, b + r if0 <= a < n and0 <= b < m and g[a][b] < g[x][y]: f[x][y] = max(f[x][y], dp(a, b) + 1) return f[x][y] res = 0 for i inrange(n): for j inrange(m): res = max(res, dp(i, j)) print(res)
n = int(input()) g = [list(map(int, input().split())) for _ inrange(n)] g.sort(lambda x:x[1]) res, end = 0, float('-inf') for a, b in g: if a > end: res += 1 end = b print(res)
n = int(input()) g = [list(map(int, input().split())) for _ inrange(n)] g.sort(lambda x: x[1]) res, end = 0, float('-inf') for a, b in g: if a > end: res += 1 end = b print(res)
import heapq n = int(input()) g = [list(map(int, input().split())) for _ inrange(n)] g.sort() res = [] for a, b in g: if res and a > res[0]: heapq.heappop(res) heapq.heappush(res, b) print(len(res))
s, t = map(int, input().split()) n = int(input()) g = [list(map(int, input().split())) for _ inrange(n)] g.sort() idx = res = 0 flag = False while idx < n: r = float('-inf') while idx < n and g[idx][0] <= s: r = max(r, g[idx][1]) idx += 1 if r < s: break s = r res += 1 if r >= t: flag = True break print(res if flag else'-1')
import heapq n = int(input()) nums = list(map(int, input().split())) heapq.heapify(nums) res = 0 whilelen(nums) > 1: a, b = heapq.heappop(nums), heapq.heappop(nums) res += a + b heapq.heappush(nums, a + b) print(res)
n = int(input()) g = [list(map(int, input().split())) for _ inrange(n)] g.sort(lambda x: x[0] + x[1]) res, pre_sum = float('-inf'), 0 for w, s in g: res = max(res, pre_sum - s) pre_sum += w print(res)