pdd 笔试 第三题 动态规划

n,m,t = list(map(int, input().split()))
arr=[[],[]]
for i in range(n):
    a,b = list(map(int, input().split()))
    arr[0].append([a,b])
for i in range(m):
    a,b = list(map(int, input().split()))
    arr[1].append([a,b])

ans=float('inf')
dp=[ans]*(t+2)
dp[0]=0
arr[0].sort(key=lambda x:x[1],reverse=True)
for rl,mw in arr[0]:
    mw=min(mw,t)
    dp[mw]=min(dp[mw],rl)
for i in range(t,0,-1):
    dp[i]=min(dp[i+1],dp[i])

ans=min(ans,dp[t])
arr[1].sort(key=lambda x:x[0])
for rl,mw in arr[1]:
    x=t-mw
    x=max(0,x)
    ans=min(ans,dp[x]+rl)
if ans==float('inf'):
    print(-1)
else:
    print(ans)


现在看,两个sort没有什么必要,反正中餐晚餐都需要枚举一遍

顺便贴上第一题的
k,n = list(map(int, input().split()))
arr = list(map(int, input().split()))

ans=0
cnt=0
for i,x in enumerate(arr):
    if ans==k:
        print('paradox')
        exit()
    else:
        if ans+x<=k:
            ans += x
        else:
            ans=k-(ans+x-k)
            cnt+=1
print(abs(k-ans),cnt)


#笔试题目##拼多多#
全部评论
补充一个第二题的思路: https://blog.nowcoder.net/n/1b134b7b99904b769219730a7fe8cd08
1 回复
分享
发布于 2020-08-02 21:39
我也只会这两题,哭了
点赞 回复
分享
发布于 2020-08-02 21:25
联易融
校招火热招聘中
官网直投
。。复杂度不对吧,你排序了都
点赞 回复
分享
发布于 2020-08-02 21:26
第一题死活差4%的过不去,第二题,固定骰子状态,用map筛选。第三题应该排序加枚举,(没时间做了),第四题状态压缩加dp应该。
点赞 回复
分享
发布于 2020-08-07 22:54

相关推荐

1 5 评论
分享
牛客网
牛客企业服务