@@ -46,13 +46,114 @@ There are 7 possible schemes: (0), (1), (2), (0,1), (0,2), (1,2), and (0,1,2).</
46
46
### ** Python3**
47
47
48
48
``` python
49
-
49
+ class Solution :
50
+ def profitableSchemes (self , n : int , minProfit : int , group : List[int ], profit : List[int ]) -> int :
51
+ mod = 10 ** 9 + 7
52
+ m = len (group)
53
+ f = [[[0 ] * (minProfit + 1 ) for _ in range (n + 1 )]
54
+ for _ in range (m + 1 )]
55
+ for j in range (n + 1 ):
56
+ f[0 ][j][0 ] = 1
57
+ for i, (x, p) in enumerate (zip (group, profit), 1 ):
58
+ for j in range (n + 1 ):
59
+ for k in range (minProfit + 1 ):
60
+ f[i][j][k] = f[i - 1 ][j][k]
61
+ if j >= x:
62
+ f[i][j][k] = (f[i][j][k] + f[i - 1 ]
63
+ [j - x][max (0 , k - p)]) % mod
64
+ return f[m][n][minProfit]
50
65
```
51
66
52
67
### ** Java**
53
68
54
69
``` java
70
+ class Solution {
71
+ public int profitableSchemes (int n , int minProfit , int [] group , int [] profit ) {
72
+ final int mod = (int ) 1e9 + 7 ;
73
+ int m = group. length;
74
+ int [][][] f = new int [m + 1 ][n + 1 ][minProfit + 1 ];
75
+ for (int j = 0 ; j <= n; ++ j) {
76
+ f[0 ][j][0 ] = 1 ;
77
+ }
78
+ for (int i = 1 ; i <= m; ++ i) {
79
+ for (int j = 0 ; j <= n; ++ j) {
80
+ for (int k = 0 ; k <= minProfit; ++ k) {
81
+ f[i][j][k] = f[i - 1 ][j][k];
82
+ if (j >= group[i - 1 ]) {
83
+ f[i][j][k] = (f[i][j][k] + f[i - 1 ][j - group[i - 1 ]][Math . max(0 , k - profit[i - 1 ])]) % mod;
84
+ }
85
+ }
86
+ }
87
+ }
88
+ return f[m][n][minProfit];
89
+ }
90
+ }
91
+ ```
92
+
93
+ ### ** C++**
94
+
95
+ ``` cpp
96
+ class Solution {
97
+ public:
98
+ int profitableSchemes(int n, int minProfit, vector<int >& group, vector<int >& profit) {
99
+ int m = group.size();
100
+ int f[ m + 1] [ n + 1 ] [ minProfit + 1] ;
101
+ memset(f, 0, sizeof(f));
102
+ for (int j = 0; j <= n; ++j) {
103
+ f[ 0] [ j ] [ 0] = 1;
104
+ }
105
+ const int mod = 1e9 + 7;
106
+ for (int i = 1; i <= m; ++i) {
107
+ for (int j = 0; j <= n; ++j) {
108
+ for (int k = 0; k <= minProfit; ++k) {
109
+ f[ i] [ j ] [ k] = f[ i - 1] [ j ] [ k] ;
110
+ if (j >= group[ i - 1] ) {
111
+ f[ i] [ j ] [ k] = (f[ i] [ j ] [ k] + f[ i - 1] [ j - group[ i - 1]] [ max(0, k - profit[ i - 1] )] ) % mod;
112
+ }
113
+ }
114
+ }
115
+ }
116
+ return f[ m] [ n ] [ minProfit] ;
117
+ }
118
+ };
119
+ ```
55
120
121
+ ### **Go**
122
+
123
+ ```go
124
+ func profitableSchemes(n int, minProfit int, group []int, profit []int) int {
125
+ m := len(group)
126
+ f := make([][][]int, m+1)
127
+ for i := range f {
128
+ f[i] = make([][]int, n+1)
129
+ for j := range f[i] {
130
+ f[i][j] = make([]int, minProfit+1)
131
+ }
132
+ }
133
+ for j := 0; j <= n; j++ {
134
+ f[0][j][0] = 1
135
+ }
136
+ const mod = 1e9 + 7
137
+ for i := 1; i <= m; i++ {
138
+ for j := 0; j <= n; j++ {
139
+ for k := 0; k <= minProfit; k++ {
140
+ f[i][j][k] = f[i-1][j][k]
141
+ if j >= group[i-1] {
142
+ f[i][j][k] += f[i-1][j-group[i-1]][max(0, k-profit[i-1])]
143
+ f[i][j][k] %= mod
144
+ }
145
+ }
146
+ }
147
+ }
148
+ return f[m][n][minProfit]
149
+ }
150
+
151
+ func max(a, b int) int {
152
+ if a > b {
153
+ return a
154
+ }
155
+ return b
156
+ }
56
157
```
57
158
58
159
### ** ...**
0 commit comments