public int profitableSchemes(int n, int minProfit, int[] group, int[] profit) {
int m = group.length;
int mod = 1_000_000_007;
int[][][] dp = new int[m+1][n+1][minProfit + 1];//dp[i][j][k] 表示为考虑前i个任务,j个人参加工作完成至少k利润,
for (int j = 0; j <= n; j++) {
dp[0][j][0] = 1;//当没有任务时,无论多少人,利润为0的方案数为1,其他为0
}
for (int i = 1; i <= m; i++) {
for (int j = 0; j <= n; j++) {
for (int k = 0; k <= minProfit; k++) {
dp[i][j][k] = dp[i - 1][j][k];
if (j >= group[i-1]) {
dp[i][j][k] = (dp[i][j][k] + dp[i-1][j-group[i-1]][Math.max(k - profit[i-1], 0)]) % mod;
}
}
}
}
return dp[m ][n][minProfit];
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.