11import java .util .*;
22
33class Solution {
4- int n , m , size ;
5- int [][] info ;
64 int [][][] dp ;
7-
5+ int [][] info ;
6+ int n , m , CNT ;
87 public int solution (int [][] info , int n , int m ) {
9- preSetting (info , n , m );
8+ CNT = info .length ;
9+ this .info = info ;
10+ this .n = n ;
11+ this .m = m ;
12+ dp = new int [CNT ][n ][m ];
13+
14+ for (int i = 0 ; i < CNT ; i ++){
15+ for (int j = 0 ; j < n ; j ++) {
16+ Arrays .fill (dp [i ][j ], -1 );
17+ }
18+ }
19+
20+
1021 int answer = recur (0 , 0 , 0 );
22+ if (answer == 1000 ) answer = -1 ;
1123
12- if (500 <= answer ) answer = -1 ;
1324 return answer ;
1425 }
1526
16- int recur (int cnt , int a , int b ){
17- if (n <= a || m <= b ) return 500 ;
18- if (cnt == size ) return 0 ;
27+ private int recur (int cnt , int a , int b ){
28+ if (cnt == CNT ) return 0 ;
1929 if (dp [cnt ][a ][b ] != -1 ) return dp [cnt ][a ][b ];
2030
21- dp [cnt ][a ][b ] = recur ( cnt + 1 , a + info [ cnt ][ 0 ], b ) + info [ cnt ][ 0 ] ;
22- return dp [cnt ][a ][b ] = Math .min (dp [cnt ][a ][b ], recur (cnt + 1 , a , b + info [cnt ][1 ]) );
23- }
31+ dp [cnt ][a ][b ] = 1000 ;
32+ if ( a + info [ cnt ][ 0 ] < n ) dp [cnt ][a ][b ] = Math .min (dp [cnt ][a ][b ], recur (cnt + 1 , a + info [ cnt ][ 0 ] , b ) + info [cnt ][0 ] );
33+ if ( b + info [ cnt ][ 1 ] < m ) dp [ cnt ][ a ][ b ] = Math . min ( dp [ cnt ][ a ][ b ], recur ( cnt + 1 , a , b + info [ cnt ][ 1 ]));
2434
25- void preSetting (int [][] info , int n , int m ){
26- this .info = info ;
27- this .n = n ;
28- this .m = m ;
29- this .size = info .length ;
30- dp = new int [size ][n ][m ];
31-
32- for (int i = 0 ; i < size ; i ++) {
33- for (int j = 0 ; j < n ; j ++) Arrays .fill (dp [i ][j ], -1 );
34- }
35+ return dp [cnt ][a ][b ];
3536 }
3637}
0 commit comments