当前位置:   article > 正文

洛谷刷题记录(python)【算法1-5】贪心_洛谷贪心python

洛谷贪心python

【算法1-5】贪心 - 题单 - 洛谷https://www.luogu.com.cn/training/110#problems

【深基12.例1】部分背包问题

  1. n, t = map(int, input().split())
  2. class node:
  3. def __init__(self, m, V, v):
  4. self.m = m
  5. self.V = V
  6. self.v = v
  7. def __lt__(self, other):
  8. return self.v > other.v
  9. a = []
  10. for i in range(n):
  11. m, V = map(int, input().split())
  12. v = V / m
  13. temp = node(m, V, v)
  14. a.append(temp)
  15. a.sort()
  16. sum = 0.0
  17. for i in range(n):
  18. if t >= a[i].m:
  19. sum += a[i].V
  20. t -= a[i].m
  21. else:
  22. sum += a[i].v * t
  23. break
  24. print('%.2f'%sum)

排队接水

  1. n = int(input())
  2. a = [int(i) for i in input().split()]
  3. class node:
  4. def __init__(self, t, id):
  5. self.t = t
  6. self.id = id
  7. def __lt__(self, other):
  8. return self.t < other.t
  9. sum = 0.0
  10. wait = 0.0
  11. arr = []
  12. for i in range(n):
  13. temp = node(a[i], i+1)
  14. arr.append(temp)
  15. arr.sort()
  16. for i in range(n):
  17. sum += wait
  18. wait += arr[i].t
  19. sum = sum / float(n)
  20. for i in range(n-1):
  21. print(arr[i].id, end=' ')
  22. print(arr[n-1].id)
  23. print("%.2f"%sum)

P1803 凌乱的yyy / 线段覆盖

  1. n = int(input())
  2. class node:
  3. def __init__(self, l, r):
  4. self.l = l
  5. self.r = r
  6. def __lt__(self, other):
  7. return self.r < other.r
  8. arr = []
  9. for i in range(n):
  10. l, r = map(int, input().split())
  11. temp = node(l, r)
  12. arr.append(temp)
  13. arr.sort()
  14. num = 1
  15. pre = arr[0].r
  16. for i in range(1, n):
  17. if arr[i].l >= pre:
  18. num += 1
  19. pre = arr[i].r
  20. print(num)

[NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

  1. import sys
  2. from queue import PriorityQueue
  3. n = int(input())
  4. a = [int(i) for i in input().split()]
  5. q = PriorityQueue()
  6. for i in range(n):
  7. x = a[i]
  8. q.put(x)
  9. sum = 0
  10. while True:
  11. if q.qsize() == 1:
  12. break
  13. u = q.get()
  14. v = q.get()
  15. q.put(u + v)
  16. sum += u + v
  17. print(sum)

P3817 小A的糖果

  1. n, k = map(int, input().split())
  2. a = [int(i) for i in input().split()]
  3. sum = 0
  4. if a[0] > k:
  5. sum += (a[0] - k)
  6. a[0] = k
  7. for i in range(1, n):
  8. lsum = a[i-1] + a[i]
  9. if lsum > k:
  10. a[i] -= (lsum-k)
  11. sum += (lsum-k)
  12. print(sum)

P1106 删数问题

  1. c = list(input().strip())
  2. s = int(input())
  3. length = len(c)
  4. while s > 0:
  5. for i in range(length-1):
  6. if c[i] > c[i+1]:
  7. for j in range(i, length-1):
  8. c[j] = c[j+1]
  9. break
  10. length -= 1
  11. s -= 1
  12. i = 0
  13. while (i <= length-1) and (c[i] == '0'):
  14. i += 1
  15. if i == length:
  16. print('0')
  17. else:
  18. for j in range(i, length):
  19. print(c[j], end='')

P1478 陶陶摘苹果(升级版)

  1. n, s = map(int, input().split())
  2. a, b = map(int, input().split())
  3. # print(n, s, a, b)
  4. class node:
  5. def __init__(self, x, y):
  6. self.x = x
  7. self.y = y
  8. def __lt__(self, other):
  9. return self.y < other.y
  10. arr = []
  11. for i in range(n):
  12. x, y = map(int, input().split())
  13. temp = node(x, y)
  14. if a + b >= temp.x:
  15. arr.append(temp)
  16. arr.sort()
  17. # print(arr)
  18. i = 0
  19. cnt = 0
  20. while True:
  21. if i >= n:
  22. break
  23. if s < arr[i].y:
  24. break
  25. s -= arr[i].y
  26. cnt += 1
  27. i += 1
  28. print(cnt)

P5019 [NOIP2018 提高组] 铺设道路

  1. n = int(input())
  2. a = [int(i) for i in input().split()]
  3. sum = a[0]
  4. for i in range(1, n):
  5. if a[i] >= a[i-1]:
  6. sum += a[i]-a[i-1]
  7. print(sum)

P1208 [USACO1.3]混合牛奶 Mixing Milk

  1. n, m = map(int, input().split())
  2. class node:
  3. def __init__(self, val, num):
  4. self.val = val
  5. self.num = num
  6. def __lt__(self, other):
  7. return self.val < other.val
  8. a = []
  9. for i in range(m):
  10. val, num = map(int, input().split())
  11. temp = node(val, num)
  12. a.append(temp)
  13. a.sort()
  14. sum = 0
  15. i = 0
  16. while i < m:
  17. if n <= a[i].num:
  18. sum += a[i].val * n
  19. i += 1
  20. break
  21. else:
  22. sum += a[i].val * a[i].num
  23. n -= a[i].num
  24. i += 1
  25. print(sum)

P1094 [NOIP2007 普及组] 纪念品分组

  1. w = int(input())
  2. n = int(input())
  3. a = []
  4. for i in range(n):
  5. a.append(int(input()))
  6. a.sort(reverse=True)
  7. num = 0
  8. for i in range(n):
  9. if a[i] + a[n-1] > w:
  10. continue
  11. else:
  12. num = i
  13. break
  14. l = num
  15. r = n-1
  16. while l < r:
  17. if a[l] + a[r] <= w:
  18. l += 1
  19. r -= 1
  20. num += 1
  21. else:
  22. l += 1
  23. num += 1
  24. if l == r:
  25. num += 1
  26. print(num)

P4995 跳跳!

  1. n = int(input())
  2. a = [int(i) for i in input().split()]
  3. sum = 0
  4. a.sort(reverse=True)
  5. sum += a[0]*a[0]
  6. l = 0
  7. r = n-1
  8. flag = 1
  9. while l < r:
  10. sum += (a[l] - a[r]) * (a[l] - a[r])
  11. l += 1
  12. sum += (a[l] - a[r]) * (a[l] - a[r])
  13. r -= 1
  14. print(sum)

P4447 [AHOI2018初中组]分组

  1. n=eval(input())
  2. P=list(map(int,input().split()))
  3. P=sorted(P)
  4. Q=[]
  5. for i in range(n):
  6. a=P[i]
  7. Q=sorted(Q,key=lambda x:len(x))
  8. for j in range(len(Q)+1):
  9. if j<len(Q):
  10. if a ==(Q[j][-1]+1):
  11. Q[j].append(a)
  12. break
  13. else:
  14. Q.append([a])
  15. Q=sorted(Q,key=lambda x:len(x))
  16. print(len(Q[0]))

P1080 [NOIP2012 提高组] 国王游戏

  1. n = int(input())
  2. class node:
  3. def __init__(self, x, y):
  4. self.x = x
  5. self.y = y
  6. def __lt__(self, other):
  7. return self.x * self.y < other.x * other.y
  8. a = []
  9. gx, gy = map(int, input().split())
  10. for i in range(n):
  11. x, y = map(int, input().split())
  12. temp = node(x, y)
  13. a.append(temp)
  14. a.sort()
  15. b = []
  16. for i in range(n):
  17. num = gx // a[i].y
  18. gx *= a[i].x
  19. b.append(num)
  20. b.sort()
  21. print(b[n-1])

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/347371?site
推荐阅读
相关标签
  

闽ICP备14008679号