1- import java .io .BufferedReader ;
2- import java .io .InputStreamReader ;
3- import java .util .StringTokenizer ;
1+ import java .io .*;
2+ import java .util .*;
43
54public class Main {
6- static int N ;
7- static int [] memo ;
8-
5+ static int n ;
6+ static int [] days , money , dp ;
7+ static StringTokenizer st ;
8+ static BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
99 public static void main (String [] args ) throws Exception {
10- BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
11- StringTokenizer st ;
12- N = Integer .parseInt (br .readLine ());
13- memo = new int [N + 2 ];
10+ inputSetting ();
11+ System .out .println (buttounUp ());
12+ }
1413
15- for (int i = 1 ; i < N + 1 ; i ++) {
16- st = new StringTokenizer (br .readLine ());
17- dp (Integer .parseInt (st .nextToken ()), Integer .parseInt (st .nextToken ()), i );
18- }
19- if (memo [N + 1 ] == 0 ) memo [N + 1 ] = memo [N ];
20- memo [N + 1 ] = Math .max (memo [N + 1 ], memo [N ]);
14+ static int buttounUp () {
15+ dp [n ] = 0 ;
2116
22- System .out .println (memo [N + 1 ]);
17+ for (int i = n - 1 ; 0 <= i ; i --){
18+ dp [i ] = Math .max (dp [i + 1 ], dp [i + days [i ]] + money [i ]);
19+ }
20+ return dp [0 ];
2321 }
2422
23+ static void inputSetting () throws Exception {
24+ n = Integer .parseInt (br .readLine ());
2525
26- public static void dp ( int reduiredDay , int momey , int today ){
27- int day = reduiredDay + today ;
28-
29- //오늘의 상담수익이 0이면, 전날까지의 상담수익의 최댓값이 오늘의 최댓값
30- memo [ today ] = Math . max ( memo [ today ], memo [ today - 1 ] );
26+ days = new int [ n ];
27+ money = new int [ n ] ;
28+ dp = new int [ n + 50 ];
29+ for ( int i = 0 ; i < n ; i ++){
30+ st = new StringTokenizer ( br . readLine () );
3131
32- if (day < N + 2 )
33- memo [day ] = Math .max (memo [day ], momey + memo [today ]);
32+ days [i ] = Integer .parseInt (st .nextToken ());
33+ money [i ] = Integer .parseInt (st .nextToken ());
34+ }
35+ Arrays .fill (dp , -10000 );
3436 }
3537}
0 commit comments