https://codingcompetitions.wi...python
T 组数据,每组两行,第一行 N,B 表明有 N 个待售房屋,你拥有的钱是 B。第二行是 N 个整数,表明每一个房屋的价格。
求能购买的最多房屋数量。app
T = int(input()) for t in range(T): N, B = map(int, input().split()) a = list(map(int, input().split())) a.sort() cnt = 0 for x in a: if B < x: break cnt += 1 B -= x print('Case #%d: %d' % (t+1, cnt))
T 组数据。每组数据 N + 1 行:第一行 N, K, P,表明有 N 摞盘子,每摞都是 K 个。一共须要挑出 P 个。后面 N 行每行是 K 个整数表明这摞盘子中每一个盘子的颜值,顺序是从上到下。测试
须要保证挑出的盘子的颜值的和最大。google
T = int(input()) for t in range(T): N, K, P = map(int, input().split()) s = [] for _ in range(N): s.append(list(map(int, input().split()))) for i in range(N): for j in range(1, K): s[i][j] += s[i][j-1] s[i].append(0) dp = [[0] * (P+1) for _ in range(N+1)] for i in range(1, N+1): for j in range(1, P+1): for x in range(0, min(j, K)+1): dp[i][j] = max(dp[i][j], dp[i-1][j-x] + s[i-1][x-1]) print('Case #%d: %d' % (t+1, dp[N][P]))
T 组数据,每组两行,第一行 N,K 表明一个严格递增数列中有 N 个数,咱们能够向其中插入 K 个任意数字。第二行是这 N 个整数。
插入数字后咱们但愿数列的相邻数字差的最大值尽量小,求这个最小值。code
import math T = int(input()) for t in range(T): N, K = map(int, input().split()) s = list(map(int, input().split())) d = [] for i in range(1, len(s)): d.append(s[i]-s[i-1]) maxv = max(d) if maxv < 2: print('Case #%d: %d' % (t+1, maxv)) else: d.sort(reverse=True) l, r = 1, maxv while l < r: m = l + r >> 1 ks = 0 for dd in d: if dd <= m: break ks += math.ceil(dd/m)-1 if ks > K: l = m + 1 else: r = m print('Case #%d: %d' % (t+1, r))
把 N 个字符串分红 K 个组(N 必定被 K 整除)。每组的分数是这一组字符串最长公共前缀的和。求全局分数最大递归
T = int(input()) for tt in range(T): N, K = map(int, input().split()) ss = [] for _ in range(N): ss.append(input()) base = ord('A') class TrieNode: def __init__(self): self.cnt = 0 self.children = [None] * 26 def add(self, s): self.cnt += 1 if not s: return if not self.children[i]: self.children[i] = TrieNode() self.children[i].add(s[1:]) root = TrieNode() for s in ss: t = root for ch in s: t.cnt += 1 i = ord(ch) - base if not t.children[i]: t.children[i] = TrieNode() t = t.children[i] t.cnt += 1 cnt = 0 root.cnt = 0 stack = [root] while stack: t = stack.pop() cnt += t.cnt // K for c in t.children: if c and c.cnt >= K: stack.append(c) print('Case #%d: %d' % (tt+1, cnt))
T = int(input()) for t in range(T): N, K = map(int, input().split()) ss = [] for _ in range(N): ss.append(input()) ss.sort() cnt = [0] def find(i, j, k): s = i while s < j and k >= len(ss[s]): s += 1 x = s while s < j: while x < j and ss[x][k] == ss[s][k]: x += 1 if x - s >= K: cnt[0] += (x - s) // K find(s, x, k+1) s = x find(0, len(ss), 0) print('Case #%d: %d' % (t+1, cnt[0]))
欢迎来个人博客: https://codeplot.top/
个人博客刷题分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/字符串