难度:
Hard
题意:
思路:
代码:
class Solution {
private static int MOD = 1000000007;
public int profitableSchemes(int G, int P, int[] group, int[] profit) {
int[][] dp = new int[G + 1][P + 1];
for(int i = 0;i <= G;i++) {
for (int j = 0;j <= P;j++) {
dp[i][j] = 0;
}
}
dp[0][0] = 1;
for (int k = 0;k < group.length;k++) {
for (int i = G;i >= 0;i--) {
if (i + group[k] > G) {
continue;
}
for (int j = 0;j <= P;j++) {
int p = j + profit[k];
if (p > P) {
p = P;
}
dp[i + group[k]][p] += dp[i][j];
if (dp[i + group[k]][p] >= MOD) {
dp[i + group[k]][p] -= MOD;
}
}
}
}
int ret = 0;
for (int i = 1;i <= G;i++) {
ret += dp[i][P];
if (ret >= MOD) {
ret -= MOD;
}
}
return ret;
}
}