Aigon

用户名Aigon
班级
学号20222034046

提交总数 0
通过 0
通过率 0%
错误解答 0
时间超限 0
编译错误 0

**最大二叉树:** nums = list(map(int, input().split())) res = [] def build(lst): if not lst: return m, i = max(lst), lst.index(max(lst)) res.append(str(m)) l, r = lst[:i], lst[i+1:] if not l and not r: return build(l) if l else res.append("null") build(r) if r else res.append("null") build(nums) print(' '.join(res) if res else "null") **寻找多数:** n = int(input()) nums = list(map(int, input().split())) def f(a): if len(a)==1: return a[0] l,r = f(a[:len(a)//2]), f(a[len(a)//2:]) return l if a.count(l) > a.count(r) else r print(f(nums)) **最大子序和:** input() a = list(map(int, input().split())) c = m = a[0] for x in a[1:]: c = max(x, c + x); m = max(m, c) print(m) **换硬币:** N = int(input()) dp = [0] + [N+1]*N for i in range(1, N+1): for c in [2,5,7]: if i>=c: dp[i] = min(dp[i], dp[i-c]+1) print(dp[N] if dp[N]<=N else -1) **走网格:** m, n = map(int, input().split()) dp = [1] * n for _ in range(1, m): for j in range(1, n): dp[j] += dp[j-1] print(dp[-1]) **爬楼梯:** n = int(input()) a, b = 1, 2 for _ in range(n-1): a, b = b, a+b print(a) **背包问题:** n, c = map(int, input().split()) w = list(map(int, input().split())); v = list(map(int, input().split())); dp = [0]*(c+1) for i in range(n): [dp.__setitem__(j, max(dp[j], dp[j-w[i]]+v[i])) for j in range(c, w[i]-1, -1)] print(dp[c]) **最长回文子串:** s = input(); n = len(s); dp = [[i==j for j in range(n)] for i in range(n)] st, ml = 0, 1 for j in range(1, n): for i in range(j): if s[i]==s[j] and (j-i<3 or dp[i+1][j-1]): dp[i][j] = True if j-i+1>ml: ml, st = j-i+1, i print(s[st:st+ml]) **目标和:** nums = list(map(int, input().split())); t = int(input()); n = len(nums) d = {} def f(i, c): if i == n: return 1 if c == t else 0 if (i, c) in d: return d[(i, c)] r = f(i+1, c+nums[i]) + f(i+1, c-nums[i]); d[(i, c)] = r; return r print(f(0, 0)) **电话号码的字母组合:** import itertools mp = {"2": "abc", "3": "def", "4": "ghi", "5": "jkl", "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"} s = input().strip() res = ["".join(p) for p in itertools.product(*[mp[c] for c in s])] if s else [] print("[" + ", ".join(res) + "]") **优美的排列:** n = int(input()) def f(p, k): if k > n: return 1 r = 0 for i in range(1, n+1): if i not in p and (i%k==0 or k%i==0): r += f(p+[i], k+1) return r print(f([],1)) **组合:** n, k = map(int, input().split()) def b(s, p): if len(p) == k: print(" ".join(map(str, p))); return for i in range(s, n+1): b(i+1, p+[i]) b(1, []) **整数拆分:** n = int(input()) dp = [0]*(n+1); dp[2] = 1 for i in range(3, n+1): for j in range(1, i): dp[i] = max(dp[i], j*(i-j), j*dp[i-j]) print(dp[n]) **找假币:** import sys d = sys.stdin.read().split() n = int(d[0]) c = list(map(int, d[1:1+n])) def f(l, r): if l==r: return l+1 if r-l==1: return l+1 if c[l]<c[r] else r+1 g = (r-l+1)//3 m1, m2 = l+g, l+2*g s1, s2 = sum(c[l:m1]), sum(c[m1:m2]) return f(l, m1-1) if s1<s2 else f(m1, m2-1) if s1>s2 else f(m2, r) print(f(0, n-1)) **分割等和子集:** import sys d=sys.stdin.readline().split() if not d or (s:=sum(map(int,d)))%2:print("false");exit() dp=[1]+[0]*(s//2) for x in map(int,d): for j in range(s//2,x-1,-1):dp[j]|=dp[j-x] print("true" if dp[s//2] else "false") **三角形的最大周长:** import sys a = sorted(map(int, sys.stdin.readline().split())) for i in range(len(a)-1,1,-1): if a[i-2] + a[i-1] > a[i]: print(a[i-2]+a[i-1]+a[i]); exit() print(0) 1.最大二叉树 2.寻找多数 3.最大子序和 4.换硬币 5.走网格 6.爬楼梯 7.背包问题 8.最长回文子串 9.目标和 10.电话号码的字母组合 11.优美的排列 12.组合 13.整数拆分 14.找假币 15.分割等和子集 16.三角形的最大周长

已解答 0 Problems
没有找到数据。

未解答 0 Problems
没有找到数据。