Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 任务分配的动态规划算法_Algorithm_Dynamic Programming - Fatal编程技术网

Algorithm 任务分配的动态规划算法

Algorithm 任务分配的动态规划算法,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我正在努力解决这个问题。我试图通过简单的递归来解决这个问题,但是对于大型案例来说,它所花费的时间是巨大的,我想通过编写一个动态编程算法来改进它 有n给定的学生和n给定的任务。每个学生都由长度为n的1d数组表示,数组长度为0s和1sA[i]==0表示该学生无法完成i的第项任务,A[i]==1表示该学生可以完成i的第项任务。目标是确定有多少种不同的方式以一种方式分配任务给学生,所有任务都可以完成,单个学生只完成一项任务 我将非常感谢任何关于如何用动态规划方法处理这个问题的提示。您的问题看起来确实像是

我正在努力解决这个问题。我试图通过简单的递归来解决这个问题,但是对于大型案例来说,它所花费的时间是巨大的,我想通过编写一个动态编程算法来改进它

n
给定的学生和
n
给定的任务。每个学生都由长度为n的
1d数组表示,数组长度为
0
s和
1
s
A[i]==0
表示该学生无法完成
i
的第项任务,
A[i]==1
表示该学生可以完成
i
的第项任务。目标是确定有多少种不同的方式以一种方式分配任务给学生,所有任务都可以完成,单个学生只完成一项任务


我将非常感谢任何关于如何用动态规划方法处理这个问题的提示。

您的问题看起来确实像是一个二部图(图论)的匹配问题,其中学生是一个节点,任务是另一个节点(来自另一个集合)。边表示它们之间的兼容性。我没有任何解决方案,但你们可以找到一些关于匹配问题和动态规划的好东西

cin>>n;
    cin>>n;
    int a[n+1][n+1];
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++){
            cin>>a[i][j];
        }
    int dp[(1<<n)];
    memset(dp,0,sizeof(dp));
    dp[0]=1;
    for(mask=1;mask<(1<<n);mask++){
        x=getbits(mask);
            for(i=0;i<n;i++)
                if(mask & (1<<i) && a[x][i+1]){
                    dp[mask]+=dp[mask^(1<<i)];
            }
    }
    cout<<dp[(1<<n)-1];
INTA[n+1][n+1]; 对于(i=1;ia[i][j]; }
int dp[(1输入输出示例以获得更清晰的解释?输入的界限是什么?如果您给出递归解决方案,我相信将其转换为dp解决方案将非常简单?
    dp[mask]+=dp[mask^(1<<i)];