天天看點

貪心算法(貪婪)python

Problem A

n=input().split()

ans=0

for _ in range(int(n[0])):

    ans+=max(int(x) for x in input().split())

print(ans)

Problem B

n=int(input())

ns=[int(x) for x in input().split()]

avg=sum(ns)//n

ans=0

for x in range(n-1):

    c=avg-ns[x]

    if c:

        ns[x+1]-=c

        ans+=1

print(ans)

Problem  C

n=int(input())

s=[]

for _ in range(n):

    s.append([int(x) for x in input().split()])

s.sort(key=lambda x:x[1])

ans,end=0,0

for x in s:

    if x[0]>=end:

        ans+=1

        end=x[1]

print(ans)

Problem  D

n=list(input())

s=int(input())

for _ in range(s):

    for i in range(len(n)-1):

        if n[i]>n[i+1]:

            n.pop(i)

            break

    else:

        n.pop()

print(int(''.join(n)))

Problem E

a=0.25

d={(2**i)*a:int(x) for i,x in enumerate(input().split())}

c=[0.25,0.5,1.0,2.0]

c.sort(key=lambda x:d[x]/x)

n=int(input())

ans=0

for x in c:

    ans+=(n//x)*d[x]

    n=n%x

print(int(ans))

Problem  G

import functools

n = int(input())

numberlist = input().split()

def compare(x, y):

    if x + y > y + x:

        return 1

    elif x + y == y + x:

        return 0

    else:

        return -1

numberlist.sort(key=functools.cmp_to_key(compare), reverse=True)

number = "".join(numberlist)

print(int(number))

Problem  H

ns=[int(x) for x in input().split()]

ns=[0]+ns

ans=[]

for x in range(1,len(ns)):

    if not ans or ns[x]>ans[-1]:

        ans.append(ns[x])

    else:

        for i in range(len(ans)):

            if  ns[x]<=ans[i]:

                ans[i]=ns[x]

                break

print(len(ans))