文章目录

  • 1. 题目
  • 2. 解题

1. 题目

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

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

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

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

示例 1:
输入:n = 5, minProfit = 3, group = [2,2], profit = [2,3]
输出:2
解释:至少产生 3 的利润,该集团可以完成工作 0 和工作 1 ,或仅完成工作 1 。
总的来说,有两种计划。示例 2:
输入:n = 10, minProfit = 5, group = [2,3,5], profit = [6,7,8]
输出:7
解释:至少产生 5 的利润,只要完成其中一种工作就行,所以该集团可以完成任何工作。
有 7 种可能的计划:(0),(1),(2),(0,1),(0,2),(1,2),以及 (0,1,2) 。提示:
1 <= n <= 100
0 <= minProfit <= 100
1 <= group.length <= 100
1 <= group[i] <= 100
profit.length == group.length
0 <= profit[i] <= 100

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/profitable-schemes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dp[k][j] 表示 k 个人 完成收益 j 的方案数
class Solution {public:int profitableSchemes(int n, int minProfit, vector<int>& group, vector<int>& profit) {int m = group.size();int tot = accumulate(profit.begin(), profit.end(), 0);vector<vector<long long>> dp(n+1, vector<long long>(tot+1, 0));dp[0][0] = 1;for(int i = 0; i < m; ++i){for(int k = n-group[i]; k >= 0; --k)for(int j = tot-profit[i]; j >= 0; --j){dp[k+group[i]][j+profit[i]] += dp[k][j];}}int mod = 1e9+7, ans = 0;for(int k = 0; k <= n; ++k)for(int j = minProfit; j <= tot; ++j)ans = (ans + dp[k][j])%mod;return ans;}
};

1084 ms 41.4 MB C++

  • dp[k][j] 表示 k 个人 完成 至少收益 j 的方案数
class Solution {public:int profitableSchemes(int n, int minProfit, vector<int>& group, vector<int>& profit) {int m = group.size(), mod = 1e9+7;vector<vector<long long>> dp(n+1, vector<long long>(minProfit+1, 0));dp[0][0] = 1;for(int i = 0; i < m; ++i){for(int k = n-group[i]; k >= 0; --k)for(int j = minProfit; j >= 0; --j){dp[k+group[i]][min(minProfit,j+profit[i])] += dp[k][j];dp[k+group[i]][min(minProfit,j+profit[i])] %= mod;}}int ans = 0;for(int k = 0; k <= n; ++k)ans = (ans + dp[k][minProfit])%mod;return ans;}
};

192 ms 9.5 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 879. 盈利计划(动态规划)相关推荐

  1. LeetCode 879. 盈利计划

    879. 盈利计划 本题与经典背包问题非常相似.两者不同点在于经典背包问题只有一种容量限制,而本题却有两种限制:集团员工人数上限 n,以及工作产生的利润下限 minProfit. 通过经典背包问题的练 ...

  2. leetcode 879. 盈利计划(dp)

    这是我参与更文挑战的第9天 ,活动详情查看更文挑战 题目 集团里有 n 名员工,他们可以完成各种各样的工作创造利润. 第 i 种工作会产生 profit[i] 的利润,它要求 group[i] 名成员 ...

  3. LeetCode刷题笔记-动态规划-day4

    文章目录 LeetCode刷题笔记-动态规划-day4 55. 跳跃游戏 1.题目 2.解题思路 3.代码 45. 跳跃游戏 II 1.题目 2.解题思路 3.代码 LeetCode刷题笔记-动态规划 ...

  4. LeetCode Increasing Triplet Subsequence(动态规划)

    问题:问数组中是否存在一个上升的三元子序列 思路:方法一是使用动态规划求解上升子序列,如果子序列长度等于3,说明存在 方法二是使用small,mid分别记录最小值,第二小值,如果当前值比small小则 ...

  5. LeetCode Longest Increasing Subsequence(动态规划、二分法)

    问题:求数组的最长上升子序列问题 思路:第一种方法使用动态规划方法,用dp(i)来表示从0到i之间的最长上升子序列的长度.状态转移方程为dp(i)=max{dp(j)+1},其中0<=j< ...

  6. LeetCode 97交错字符串(动态规划)

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...

  7. 【LeetCode】LeetCode之跳跃游戏——动态规划+贪心算法

    [LeetCode]LeetCode之打家劫舍[暴力递归.动态规划.动态规划之优化空间的具体分析与实现] https://blog.csdn.net/Kevinnsm/article/details/ ...

  8. LeetCode 1176. 健身计划评估(滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 你的好友是一位健身爱好者.前段日子,他给自己制定了一份健身计划.现在想请你帮他评估一下这份计划是否合理. 他会有一份计划消耗的卡路里表,其中 calori ...

  9. LeetCode 1335. 工作计划的最低难度(DP)

    1. 题目 你需要制定一份 d 天的工作计划表.工作之间存在依赖,要想执行第 i 项工作,你必须完成全部 j 项工作( 0 <= j < i). 你每天 至少 需要完成一项任务.工作计划的 ...

最新文章

  1. R语言使用caret包构建gbdt模型(随机梯度提升树、Stochastic Gradient Boosting )构建回归模型、通过method参数指定算法名称
  2. Python-可视化Evoked数据
  3. 洛谷P2158 [SDOI2008]仪仗队
  4. 轻松使用zstd来解压缩
  5. linux idea 权限,Linux下idea由于缺少相关权限导致的tomcat ERROR
  6. 数据科学家编程能力需要多好_我们不需要这么多的数据科学家
  7. SAS 读取数据文件
  8. WEB安全基础-命令注入
  9. react native多语言_前端福音:为什么使用 React 和 SVG 开发图形 UI 是天作之合?
  10. 设计模式三(工厂方法模式)学习笔记
  11. pytorch学习笔记(一):Tensor(张量)
  12. JavaScript中的(内置)方式来检查字符串是否为有效数字
  13. C++ 从入门到入土(English Version)Section5: Real numbers + bitwise operations
  14. 机器学习实战(一)xgboost实战
  15. Idea 2020 找不到或无法安装官方汉化包解决方案
  16. IT 软件测试 ——轻松月入过20K 测试工程师年薪35W
  17. 【转】死链-百度百科
  18. vscode配置远程连接失败:过程试图写入的管道不存在(已解决)
  19. 华为数据管理与分析课程
  20. GPL协议允许你怎么卖?

热门文章

  1. html 缩略图点击预览,[每天进步一点点~] uni-app 点击图片实现预览图片列表
  2. scrapy框架_Python学习之Scrapy框架
  3. pymysql操作mysql数据库
  4. *args, **kwargs的用法
  5. cad多段线画圆弧方向_CAD箭头怎么画
  6. python 重载的实现(single-dispatch generic function)
  7. afn post请求上传文件_iOS利用AFNetworking(AFN) 实现图片上传
  8. citespace安装如何配置JAVA_citespace超详细安装教程
  9. php是一种,PHP是一种什么型的语言:()
  10. VS2013崩溃,无法打开项目的解决方案