当前位置: 首页 > news >正文

力扣题解(盈利计划)

879. 盈利计划

集团里有 n 名员工,他们可以完成各种各样的工作创造利润。

第 i 种工作会产生 profit[i] 的利润,它要求 group[i] 名成员共同参与。如果成员参与了其中一项工作,就不能参与另一项工作。

工作的任何至少产生 minProfit 利润的子集称为 盈利计划 。并且工作的成员总数最多为 n 。

有多少种计划可以选择?因为答案很大,所以 返回结果模 10^9 + 7 的值

思路:

本题由于题目要求的是利润不小于minprofit的所有计划数目,因此dp设计上有所特别。

dp[i][j][k]表示前i个工作,利润不小于j,所需工人不大于k的所有计划数目,则dp的组成:

dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j-p[i]][k-g[i]],此处要求k-g[i]必须大于等于0,因为不可能存在人数小于一个负数的情况,但j-p[i]可以小于等于0,因此存在利润大于一个负数的情况,注意,这是因此此处dp的设计含义导致的。但是数组下标不能是负的,而利润正常也不会是负的,因此对于j-p[i]小于零的情况,其可能的计划数目和j位置取0的计划数目一致,因此实质上dp[i][j][k]=dp[i-1][j][k]+dp[i-1][ max(j-p[i] ,0) ][k-g[i]]。

初始化:

当j=0的时候,即求利润大于等于零的情况,则不管i,k取什么值,都至少有所有都不取这一种选择方法使得j==0成立,因此dp[0][j][0]=1.

优化:

此处dp[i][][]之和dp[i-1][][]有关,因此可以化成二维,主要这样的话j,k要从大到小遍历。

class Solution {
public:int profitableSchemes(int n, int m, vector<int>& g, vector<int>& p) {const int mod=1e9 + 7;int len=g.size();vector<vector<int>>dp(n+1,vector<int>(m+1));for(int j=0;j<=n;j++){dp[j][0]=1;}for(int i=1;i<=len;i++)for(int j=n;j>=g[i-1];j--)for(int k=m;k>=0;k--){dp[j][k]+=dp[j-g[i-1]][max(0,k-p[i-1])];dp[j][k]%=mod;}return dp[n][m];}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++多继承与虚继承
  • Artix7系列FPGA实现SDI视频编解码+UDP以太网传输,基于GTP高速接口,提供工程源码和技术支持
  • Unity UGUI 之 Canvas画布
  • 深入理解TCP/IP协议中的三次握手
  • GD32 MCU是如何进入中断函数的
  • Android 10.0 蓝牙音乐获取歌手、歌曲等信息功能实现
  • 微服务重启优化kafka+EurekaNotificationServerListUpdater
  • 【Docker】Docker-compose 单机容器集群编排工具
  • Armpro搭建教程全开源版的教程
  • 【BUG】已解决: KeyboardInterrupt
  • Ubuntu16.04环境下Baxter机器人开发环境搭建要点说明
  • windows ssh的登录,私钥权限太开放 WARNING: UNPROTECTED PRIVATE KEY FILE!
  • 在 CI/CD Pipeline 中实施持续测试的最佳实践!
  • C 语言实例 - 使用引用循环替换数值
  • 【LeetCode】填充每个节点的下一个右侧节点指针 II
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Angular4 模板式表单用法以及验证
  • DataBase in Android
  • ES6语法详解(一)
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • JS变量作用域
  • Linux CTF 逆向入门
  • Magento 1.x 中文订单打印乱码
  • nfs客户端进程变D,延伸linux的lock
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • use Google search engine
  • yii2权限控制rbac之rule详细讲解
  • 阿里云购买磁盘后挂载
  • 两列自适应布局方案整理
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 终端用户监控:真实用户监控还是模拟监控?
  • linux 淘宝开源监控工具tsar
  • python最赚钱的4个方向,你最心动的是哪个?
  • 如何在招聘中考核.NET架构师
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​如何在iOS手机上查看应用日志
  • #1015 : KMP算法
  • (20)docke容器
  • (27)4.8 习题课
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计大学生兼职系统
  • (回溯) LeetCode 46. 全排列
  • (力扣题库)跳跃游戏II(c++)
  • (三)终结任务
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)c52学习之旅-流水LED灯
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .helper勒索病毒的最新威胁:如何恢复您的数据?