Submission #1226408

#TimeUsernameProblemLanguageResultExecution timeMemory
1226408tgirolami09Let's Win the Election (JOI22_ho_t3)Pypy 3
10 / 100
1328 ms111156 KiB
maxN = 502

maxInt = 10**10

#First index is the state you are on (you have not spoken in it yet)
#Second index is the number of votes you have
#Third index is the number of people you have (including yourself)
#Value stored is the minimum amount of hours for this
#Little modulus to reduce memory
DP = [[[maxInt for i in range(maxN)] for j in range(maxN)] for k in range(2)]

#Three transitions
    #1) Don't talk go to next state
    #2) Talk just enough to get the vote
    #3) Talk just enough to get the helping hand


nbStates = int(input())
nbVotesNeeded = int(input())

voteTime = []
helpTime = []

normalGroup = []
noHelpGroup = []

for i in range(nbStates):
    vote,help = map(int,input().split())

    if help == -1:
        noHelpGroup.append((vote,help))

    else:
        normalGroup.append((vote,help))

for p in sorted(normalGroup,key=lambda x:x[1]):
    voteTime.append(p[0])
    helpTime.append(p[1])

for p in noHelpGroup:
    voteTime.append(p[0])
    helpTime.append(p[1])

DP[0][0][1] = 0


for stateId in range(nbStates):
    for nbvotesHad in range(min(nbVotesNeeded+1,stateId+1)):
        for nbHelpersHad in range(1,min(stateId+1,nbvotesHad+1)+1):
            #1)
            DP[(stateId+1)%2][nbvotesHad][nbHelpersHad] = min(DP[(stateId+1)%2][nbvotesHad][nbHelpersHad],DP[stateId%2][nbvotesHad][nbHelpersHad])

            #2)
            if (voteTime[stateId] != helpTime[stateId]):
                voteCost = (voteTime[stateId]/nbHelpersHad) #Float
                DP[(stateId+1)%2][nbvotesHad+1][nbHelpersHad] = min(DP[(stateId+1)%2][nbvotesHad+1][nbHelpersHad],DP[stateId%2][nbvotesHad][nbHelpersHad]+voteCost)

            #3)
            if helpTime[stateId]!=-1:
                helpCost = (helpTime[stateId]/nbHelpersHad) #Float
                DP[(stateId+1)%2][nbvotesHad+1][nbHelpersHad+1] = min(DP[(stateId+1)%2][nbvotesHad+1][nbHelpersHad+1],DP[stateId%2][nbvotesHad][nbHelpersHad]+helpCost)

result = maxInt
for i in range(nbStates+2):
        result = min(result,DP[nbStates%2][nbVotesNeeded][i])

print(result)

Compilation message (stdout)

Compiling 'Main.py'...

=======
  adding: __main__.pyc (deflated 51%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...