首页 > 编程语言 >工作安排-od-python

工作安排-od-python

时间:2024-02-04 21:24:40浏览次数:34  
标签:报酬 安排 20 python od 工作 time each dp

题目:

小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时长(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和。那么请你帮小明安排一下工作,保证小明在指定的工作时间内工作收入最大化。

输入描述:
输入的第一行为两个正整数T,n。T代表工作时长(单位h,0 < T < 100000),n代表工作数量(1 < n ≤ 3000)。
接下来是n行,每行包含两个整数t,w。t代表该项工作消耗的时长(单位h,t > 0),w代表该项工作的报酬。

输出描述:
输出小明指定工作时长内工作可获得的最大报酬。

示例:
输入:
40 3
20 10
20 20
20 5
输出:
30
————————————————

# 输入处理
T, n = map(int, input().split())
jobs = [tuple(map(int, input().split())) for _ in range(n)]

dp = [0] * (T + 1)
for i in range(n):
    each_time = jobs[i][0]
    each_salary = jobs[i][1]
    for j in range(T, each_time - 1, -1): #反向遍历
        # 在这个问题中,dp[j]表示在耗时不超过j的情况下,可以获得的最大报酬。
        # 具体来说,dp[j]的含义是:在处理前i项工作时,耗时不超过j的情况下,可以获得的最大报酬。
        # 在动态规划中,dp[j]的更新过程考虑了两种情况:
        # 不选择第i项工作,所以dp[j]保持不变,即dp[j] = dp[j]。
        # 选择第i项工作,所以需要比较不选择第i项工作和选择第i项工作两种情况下的最大报酬:dp[j]和dp[j - each_time] + each_salary,
        # 其中each_time为第i项工作的耗时,each_salary为第i项工作的报酬。
        # 最终,dp[j]的更新值就是这两种情况中的最大值。整个动态规划的目标是找到在指定的工作时长内,可以获得的最大报酬。
        dp[j] = max(dp[j], dp[j - each_time] + each_salary)
print(dp[-1])

标签:报酬,安排,20,python,od,工作,time,each,dp
From: https://www.cnblogs.com/domm/p/18007021

相关文章

  • vscode 远程登陆电脑开发
    远程隧道可以让远程通过url访问到本机,并通过vscode的UI进行开发tunnel打开有两种方式:vscode编辑器左侧命令行codetunnel不过,我的需求是,访问远程电脑的WSL子系统……尝试了上面的方法失败了(第一种方法只会开启对windows系统的访问,第二种方法,在子系统终端运行cod......
  • SharePoint Online Modern Script Editor WebPart
    前言最近在使用SharePointOnline的时候,发现一个很好用的WebPart,大家有兴趣可以试一试。正文这个WebPart有点类似以前的内容编辑器,使用起来非常简单,编辑页面直接插入就可以了,如下图:点击Editormarkup,在EditHTMLCode里面可以添加HTML,如下图:当然,这......
  • AtCoder Beginner Contest 330
    A-CountingPasses#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingvi=vector<int>;usingi32=int32_t;usingpii=pair<int,int>;#definempmake_pairconstintinf=1e9;i32main(){intn,l;......
  • left 3 Codeforces Round 913 (Div. 3)
    题目链接A.把同行同列除了起点都输出即可#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=2e5+10;voidsolve(){charc;inta;cin>>c>>a;for(inti=1;i<=8;i++){if(i==a)continue;cout<<c<......
  • leetcode 152 动态规划
    Problem:152.乘积最大子数组目录思路解题方法复杂度Code思路动态规划的题型见到了就记录一下吧,接触到的并不多,也不太会。这道题主要是有负数,所以需要维护两个变量,我们希望最大值尽可能大,也希望负数最小值尽可能小,因为如果下一位是负数,相乘可以变成正数,最小值就会变成最大值......
  • 极狐 GitLab 和 Xcode Cloud 集成,实现 iOS 的自动打包
    一直以来,iOS/macOS开发者面临一个难题:大部分云厂商只提供Linux/Windows服务器,而不提供Mac,如果想实现「持续集成自动打包」就需要绑定自己的Mac作为构建机。如果用个人Mac,一旦关机,小组同事就无法构建;如果再买一台公共Mac,又造成浪费。2022年6月,Apple在WWDC(全球开发者......
  • AtCoder Beginner Contest 339
    基本情况A和C出的比较快但不能说秒了还是思考了几分钟的,然后B很奇怪我样例还有一些测试点都能过,但有些测试点就是过不了...A-TLD貌似没啥说的B-Langton'sTakahashi说实话现在还是不懂我的哪里错了很不科学啊,明明很多测试点都过了啊C-PerfectBus做题时的思路:要想求......
  • redis+python练习小问题
     1、“cannot import name 'Redis' from 'redis'"//python文件名用了“redis.py”,改成其他的就好了。这个一定要注意,很容易犯这种错,想要做什么功能,就用这个功能命名。2、NameError:name 'redis' is not defined//我开始是fromredisimportRedis,改成importredis,......
  • Good Bye 2023
    A本质就是判断\(\prod_{i=1}^{n}b_i\)是否能整除\(2023\)。输出被移除的数,只要令\(k-1\)个为\(1\),剩下的一个随便算算即可。B非常难绷。首先将\(a\)和\(b\)都除以\(\operatorname{gcd}(a,b)\),并记录原来的\(\operatorname{gcd}(a,b)\)为\(t\)。如果\(a=1\),......
  • python 决策曲线 DCA
    importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.metricsimportconfusion_matrixdefcalculate_net_benefit_model(thresh_group,y_pred_score,y_label):net_benefit_model=np.array([])forthreshinthresh_group:y_pred_lab......