生产口罩

题目描述
生产口罩
时间限制 :1sec / 空间限制: 256MB

题意:
牛妹是一家口罩厂家的老板,由于现在疫情严重,牛妹想重新分配每条生产线上的人数来使得能生产的口罩最多。
牛妹所在的公司一共有mm名员工,nn条生产线(0…n-1),每条生产线有strategy[i].size种人数安排策略。例如:33个人在aa生产线上,aa生产线每天生产88个口罩;55个人在aa生产线上,每天aa生产线能生产1515个口罩。
牛妹想知道通过合理的策略安排最多每天能生产多少口罩?(可以不用将所有员工都分配上岗,生产线可以选择闲置)

输入:
给定n,m,strategy数组
1≤n,m≤2∗103

strategy[i].size≤3000

输出:
返回每天最大的口罩生产数量
示例1
输入
复制
3,5,[[(1,3),(2,4)],[(3,4),(4,4)],[(8,8)]]
输出
复制
8
说明
样例解释: 11号生产线采用策略22,22号生产线采用策略11,33号生产线不生产

int producemask(int n, int m, vector<vector<Point> >& strategy) {
        // 类似找钱的策略 100块可以由多少1,5组合法.
        //则在用总共i组线以及j个人来组成时,组成dp[i][j];
        //当i组线不使用时 则为使用前i-1组线的情况下 组成j的最大值.dp[i-1][j]
        //当i组线使用时,则为使用前i-1组线的情况下 组成j的最大值,并且和组内组成j的情况下.组内不停的迭代max(dp[0][aim-p.x]+p.y,dp[i][j])
       	vector<vector<int>> dp(n+1, vector<int>(m + 1, 0));
		for (int i = 1; i <=n; i++)
			for (int j = 1; j <= m; j++)
			{ 
				dp[i][j]=dp[i-1][j];
				for (auto p : strategy[i-1])
				{
                    if(j < p.x) continue;
                    dp[i][j] = max(dp[i-1][j-p.x]+p.y,dp[i][j]);
				}
			}
        return dp[n][m];
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值