首页 > 试题广场 >

给3个组员分配任务

[编程题]给3个组员分配任务
  • 热度指数:79 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解


你作为vivo某部门主管,需要给三位员工小v、小i和小o分配任务。

给定四个正整数n、x、y、z,取值范围均为[0, 50],n为你待分配的任务总数,x、y、z分别为员工小v、小i和小o能处理的任务上限。

请你将这n项任务分给三位员工,要求没有任何员工获得的任务数超过他们的上限,请计算出满足此条件下的总方案数。

 输入描述:

给定四个正整数n、x、y、z,n为待分配任务总数,x、y、z分别为三位员工能处理的任务上限。
1 <= n <= 50
1 <= x <= 50
1 <= y <= 50
1 <= z <= 50

输出描述:

输出一个整数,表示满足上述条件下的总方案数


示例1

输入

5,1,2,3

输出

3

说明

总共有3种分法将5项任务分给三位员工,且每个员工获得的任务数不超过他们能处理的任务上限:
(0,2,3)
(1,1,3)
(1,2,2)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 任务分配方案数计算
# @param n int整型 待分配任务总数
# @param x int整型 员工小v能处理的任务数上限
# @param y int整型 员工小i能处理的任务数上限
# @param z int整型 员工小o能处理的任务数上限
# @return int整型
#
class Solution:
    def assignJobs(self , n: int, x: int, y: int, z: int) -> int:
        # write code here

        ans=0
        def dfs(n,i,x,y,z):
            nonlocal ans
            print(i,n)
            if i==3 :
                if n==0:
                    ans+=1
                return
            if i==0:
                for j in range(x+1):
                    if n-j>=0:
                        dfs(n-j,i+1,x,y,z)
            elif i==1:
                for j in range(y+1):
                    if n-j>=0:
                        dfs(n-j,i+1,x,y,z)
            else:
                for j in range(z+1):
                    if n-j>=0:
                        dfs(n-j,i+1,x,y,z)            
        dfs(n,0,x,y,z)
        return ans                            
发表于 2025-09-12 13:12:24 回复(0)