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
第一题死活差4%的过不去,第二题,固定骰子状态,用map筛选。第三题应该排序加枚举,(没时间做了),第四题状态压缩加dp应该。
点赞 回复 分享
发布于 2020-08-07 22:54
。。复杂度不对吧,你排序了都
点赞 回复 分享
发布于 2020-08-02 21:26
我也只会这两题,哭了
点赞 回复 分享
发布于 2020-08-02 21:25

相关推荐

05-30 18:54
武汉商学院 Java
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务