// F는 [I] [J] 최대 (F가 [I-1] [J], F [I-1] [JV [I] + w [I]) = 사용법 #include <iostream> 사용하는 네임 스페이스 표준을; CONST INT = N 1,010 ; INT의 N, m; INT V [N], w [N]; INT의 F [N] [N]; 값 int () {메인 CIN >> N- m] 대 ( INT I = . 1 ; I <= N-; I ++) CIN >> V [I] >> W [I] 대 ( INT I = N-; I> = 1이다. ; I -) // 앞에서 최소 사전 편찬, 푸시 백은 DP 할 때, 뒤쪽의 대 ( INT J = 0 ; J <= m; J ++) { // 이차원의 상태 이후 루프 순서는 중요하지 않다 F를 [I] [J] = F [I + 1이다. ] [J] IF (J> = V [I]) F [I] [J] = 최대 (F [I] [J] , F [I + 1이다. ] [J - V [I] + W [I]); } // [. 1] F [m]는 최대 값이다 INT J = m; 대 ( INT I = 1. ; I <= N-; I ++) // 턴 선택된 각 항목을 참조 할 수 // 보증 늦어도를 0 이상 IF (&& F == F J> = V [I]는 [I]는 [J] [I + 1. [J가 - V [I]를] + W가 [I]가) { //이 만큼 군으로부터 선택된으로부터 선택 될 수있다 아니함 COUT I << << ' ' ; J - = V [I]; } 반환 0 ; }