99832024-03-22 23:12:0542Zebra (75 pont)python3Időlimit túllépés 65/75735ms14500 KiB
from sys import stdin
input=stdin.readline

def pre(X):
    for i in range(1,len(X)):
        X[i]+=X[i-1]
    return X

memo={}

def main():
    N = int(input())
    C = [int(x) for x in input().split()]
    T = [int(x) for x in input().split()]
    B=[]
    J=[]
    for i in range(N):
        if C[i]==0:
            B.append(T[i])
        else:
            J.append(T[i])
    B.sort()
    J.sort()
    preB=pre(B[:])
    preJ=pre(J[:])

    def solv(x,y):
        if (x,y) in memo:
            return memo[(x,y)]
        last=max(B[x-1],J[y-1])
        res=(x+y)*last-preB[x-1]-preJ[y-1]
        if x==1 or y==1:
            return res
       
        for X in range(1,x):
            for Y in range(1,y):
                last=max(B[x-1],J[y-1])
                res=min(res,solv(X,Y)+last*(x-X+y-Y)-preB[x-1]-preJ[y-1]+preB[X-1]+preJ[Y-1])
        memo[(x,y)]=res
        return res
    
    print(solv(len(B),len(J)))
    
main()
RészfeladatÖsszpontTesztVerdiktIdőMemória
base65/75
1Elfogadva0/019ms11588 KiB
2Elfogadva0/0273ms11992 KiB
3Elfogadva5/517ms12120 KiB
4Elfogadva5/520ms12556 KiB
5Elfogadva5/5128ms12480 KiB
6Elfogadva5/5172ms12868 KiB
7Elfogadva5/5293ms13236 KiB
8Elfogadva5/5224ms13464 KiB
9Elfogadva5/5391ms13516 KiB
10Elfogadva5/5395ms13816 KiB
11Elfogadva5/5500ms13932 KiB
12Elfogadva5/5564ms14052 KiB
13Időlimit túllépés0/5735ms14304 KiB
14Elfogadva5/5400ms14368 KiB
15Elfogadva5/5337ms14236 KiB
16Időlimit túllépés0/5722ms14440 KiB
17Elfogadva5/5657ms14500 KiB