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

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

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

n, t = map(int, input().split())

class node:
    def __init__(self, m, V, v):
        self.m = m
        self.V = V
        self.v = v
    def __lt__(self, other):
        return self.v > other.v

a = []
for i in range(n):
    m, V = map(int, input().split())
    v = V / m
    temp = node(m, V, v)
    a.append(temp)
a.sort()
sum = 0.0
for i in range(n):
    if t >= a[i].m:
        sum += a[i].V
        t -= a[i].m
    else:
        sum += a[i].v * t
        break
print('%.2f'%sum)

排队接水

n = int(input())

a = [int(i) for i in input().split()]

class node:
    def __init__(self, t, id):
        self.t = t
        self.id = id
    def __lt__(self, other):
        return self.t < other.t

sum = 0.0
wait = 0.0
arr = []
for i in range(n):
    temp = node(a[i], i+1)
    arr.append(temp)

arr.sort()
for i in range(n):
    sum += wait
    wait += arr[i].t
sum = sum / float(n)
for i in range(n-1):
    print(arr[i].id, end=' ')
print(arr[n-1].id)
print("%.2f"%sum)

P1803 凌乱的yyy / 线段覆盖

n = int(input())

class node:
    def __init__(self, l, r):
        self.l = l
        self.r = r
    def __lt__(self, other):
        return self.r < other.r

arr = []
for i in range(n):
    l, r = map(int, input().split())
    temp = node(l, r)
    arr.append(temp)

arr.sort()
num = 1
pre = arr[0].r
for i in range(1, n):
    if arr[i].l >= pre:
        num += 1
        pre = arr[i].r
print(num)

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

import sys
from queue import PriorityQueue

n = int(input())
a = [int(i) for i in input().split()]
q = PriorityQueue()


for i in range(n):
    x = a[i]
    q.put(x)

sum = 0
while True:
    if q.qsize() == 1:
        break
    u = q.get()
    v = q.get()
    q.put(u + v)
    sum += u + v
print(sum)

P3817 小A的糖果

n, k = map(int, input().split())
a = [int(i) for i in input().split()]

sum = 0


if a[0] > k:
    sum += (a[0] - k)
    a[0] = k
for i in range(1, n):
    lsum = a[i-1] + a[i]
    if lsum > k:
        a[i] -= (lsum-k)
        sum += (lsum-k)

print(sum)

P1106 删数问题

c = list(input().strip())
s = int(input())

length = len(c)
while s > 0:
    for i in range(length-1):
        if c[i] > c[i+1]:
            for j in range(i, length-1):
                c[j] = c[j+1]
            break
    length -= 1
    s -= 1
i = 0
while (i <= length-1) and (c[i] == '0'):
    i += 1
if i == length:
    print('0')
else:
    for j in range(i, length):
        print(c[j], end='')

P1478 陶陶摘苹果(升级版)

n, s = map(int, input().split())
a, b = map(int, input().split())
# print(n, s, a, b)
class node:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __lt__(self, other):
        return self.y < other.y

arr = []

for i in range(n):
    x, y = map(int, input().split())
    temp = node(x, y)
    if a + b >= temp.x:
        arr.append(temp)

arr.sort()
# print(arr)
i = 0
cnt = 0
while True:
    if i >= n:
        break
    if s < arr[i].y:
        break
    s -= arr[i].y
    cnt += 1
    i += 1
print(cnt)

P5019 [NOIP2018 提高组] 铺设道路

n = int(input())

a = [int(i) for i in input().split()]

sum = a[0]

for i in range(1, n):
    if a[i] >= a[i-1]:
        sum += a[i]-a[i-1]
print(sum)

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

n, m = map(int, input().split())

class node:
    def __init__(self, val, num):
        self.val = val
        self.num = num
    def __lt__(self, other):
        return self.val < other.val

a = []
for i in range(m):
    val, num = map(int, input().split())
    temp = node(val, num)
    a.append(temp)

a.sort()
sum = 0
i = 0
while i < m:
    if n <= a[i].num:
        sum += a[i].val * n
        i += 1
        break
    else:
        sum += a[i].val * a[i].num
        n -= a[i].num
        i += 1
print(sum)

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

w = int(input())
n = int(input())
a = []
for i in range(n):
    a.append(int(input()))
a.sort(reverse=True)
num = 0
for i in range(n):
    if a[i] + a[n-1] > w:
        continue
    else:
        num = i
        break
l = num
r = n-1
while l < r:

    if a[l] + a[r] <= w:
        l += 1
        r -= 1
        num += 1
    else:
        l += 1
        num += 1
if l == r:
    num += 1
print(num)

P4995 跳跳!

n = int(input())
a = [int(i) for i in input().split()]
sum = 0
a.sort(reverse=True)
sum += a[0]*a[0]
l = 0
r = n-1
flag = 1
while l < r:
    sum += (a[l] - a[r]) * (a[l] - a[r])
    l += 1
    sum += (a[l] - a[r]) * (a[l] - a[r])
    r -= 1
print(sum)

P4447 [AHOI2018初中组]分组

n=eval(input())
P=list(map(int,input().split()))
P=sorted(P)
Q=[]
for i in range(n):
    a=P[i]
    Q=sorted(Q,key=lambda x:len(x))
    for j in range(len(Q)+1):
        if j<len(Q):
            if a ==(Q[j][-1]+1):
                Q[j].append(a)
                break
        
        else:
            Q.append([a])
            
Q=sorted(Q,key=lambda x:len(x))
print(len(Q[0]))

P1080 [NOIP2012 提高组] 国王游戏

n = int(input())
class node:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __lt__(self, other):
        return self.x * self.y < other.x * other.y

a = []
gx, gy = map(int, input().split())
for i in range(n):
    x, y = map(int, input().split())
    temp = node(x, y)
    a.append(temp)
a.sort()
b = []
for i in range(n):
    num = gx // a[i].y
    gx *= a[i].x
    b.append(num)
b.sort()
print(b[n-1])

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值