[PYTHON] Atcoder ABC60 D - Solution séparée de sac à dos simple

La caractéristique est que la largeur de w est petite J'ai eu peur pour la première fois car c'était une restriction que je vois rarement

Méthode de planification dynamique

Parce que c’est un sac à dos, non? Ensuite, vous devez faire dp.

Je l'ai essayé C'est difficile si w reste 10 ^ 9, alors soustrayons base = w1 Ensuite, la taille de dp est d'environ 101 x 301, donc ce sera à temps du tout

dp.py


N,W=map(int,input().split())
dp=[[-1]*301 for i in range(N+1)]
dp[0][0]=0

for i in range(N):
    w,v=map(int,input().split())
    if i==0:
        base=w
    for i in range(N)[::-1]:
        for j in range(301)[::-1]:
            if dp[i][j]!=-1:
                dp[i+1][j+w-base]=max(dp[i][j]+v,dp[i+1][j+w-base])

ans=0
for index,item in enumerate(dp):
    if W-index*base+1<=0:
        break
    ans=max(max(item[:W-index*base+1]),ans)

print(ans)

glouton

Comme il n'y a que 4 types de poids, vous pouvez retirer celui avec un grand v de la liste qui résume chaque w Le nombre à retirer peut être essayé à la ronde pour chaque w

greedy.py


def saiki(value,HP,num):
    if num==0:
        value+=wa[0][min(HP//base,len(wa[0])-1)]
        ans.append(value)
    else:
        for i in range(len(wa[num])):
            if HP-(num+base)*i>=0:
                saiki(value+wa[num][i],HP-(num+base)*i,num-1)
            else:
                break
    return


N,W=map(int,input().split())

lis=[[] for i in range(4)]

for i in range(N):
    w,v=map(int,input().split())
    if i==0:
        base=w
    lis[w-base].append(v)

lis=list(map(lambda x:sorted(x, reverse=True),lis))

wa=[[0] for i in range(4)]

for i in range(len(wa)):
    for item in lis[i]:
        wa[i].append(wa[i][-1]+item)

ans=[]
saiki(0,W,3)
    

print(max(ans))

Pourquoi sont-ils arrangés? Je ne suis pas doué pour les bogues comme "pas encore défini" quand je traite des nombres

Recommended Posts

Atcoder ABC60 D - Solution séparée de sac à dos simple
Atcoder ABC099 C - Solution séparée de Strange Bank
AtCoder ABC 182 Python (A ~ D)
AtCoder ABC176
AtCoder ABC177
AtCoder ABC155 Problème D Pairs Review Note 1
Résoudre AtCoder ABC168 avec python (A ~ D)
AtCoder ABC 174 Python
AtCoder ABC 175 Python
Atcoder ABC115 Exercice de questions passées
AtCoder ABC155 Problème D Pairs Review Note 2 NumPy et Python
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
AtCoder ABC151 Problème D Comparaison de la vitesse en C ++ / Python / PyPy
AtCoder ABC156 Problème D Calcul et séquence du module Bouquet, etc.
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente