밀러는 이야기 지난 주를 말한다 작고 작은 하이 호 열심히 노력이 마침내 복권의 광대 한 수있어! 그리고 지금, 마지막 시간은 작은 호의 보상을받을 수 있습니다!
호는 이제 M 시트 복권, 현상 및 현상 영역의 손이 작은 것은 각각 제 i 부재 어렵게하기 위해, 추첨 시트를 구속하고, 또한 한번 교환 할 수있는 상품은 (ⅰ) 필요한 필요 N에 1 번째 N 부를 가지고 추첨은 각 호 작은 상품이 나는 조각 값 값 (i)를 점수로 최우수상을 포함하여 포인트를 가지고있다, 낭비되지 않습니다, 그는 수상의이 작품의 자신의 기본 설정 값을 표명했다. 이제 그는 상품으로 교환 할 수 있습니다 그의 손에 이러한 복권, 그래서 이러한 값과 최대에 상품 기본 설정 덕분에, 알고 싶어.
팁 하나 : 추상적 합리적인 문제, 국가의 정의는 가장 중요한 단계 동적 프로그래밍입니다
팁 두 가지 : 당신은 시간 소비를 줄이기 말했다, 우리는 공간 소비를 감소하는 방법을 살펴
입력각각의 테스트 지점 (입력 파일) 및 테스트 데이터의 집합.
각 시험 양의 정수 N과 M의 제 2 막의 개수는, 그 상, 추첨 호 손 작은 수를 나타낸다.
이전의 의미를 설명 할 때 다음 설명 n 행의 각 행은, 상, 두 정수의 작동 제가 필요 항 (I) 및 값 (I)을 설명한다.
그 테스트 데이터를 확인
데이터의 100 %로, N의 값은 M의 값보다 10 ^ 5없고, 500 이하인
2 * 10 ^ 5 값보다 더 이상 데이터를 필요 (I)의 100 % (나)을 초과하지 않는 10 ^ 3
샘플 입력
5 1000
144 990
487 436
210 673
567 58
1056 897
샘플 출력
2,099
산출
테스트 케이스를 들어, 정수 Ans By의, 호 출력이 작은 총 선호 특성 값을 얻을 수있다 나타낸다.
#INCLUDE <iostream>
#INCLUDE <iostream>
#INCLUDE <cstdio>
#INCLUDE < 문자열 >
#INCLUDE <CString을>
#INCLUDE <알고리즘>
#INCLUDE <STDIO.H>
#INCLUDE < 문자열 .H>
#INCLUDE <벡터>
# 포함 < SET >
은 USING 공간 STD,
INT의 V [ 509 ], W [ 509 ] DP [ 509 ] [ 100009은 ]; // 시작 어레이 ML 결과 큰 하나 이차원 어레이이다.
// 나중에 작은 WA 결과의 대형 2 차원 어레이.
INT주 ()
{
INT의 N, 백;
반면 (CIN N >> >> 가방)
{
memset 함수 (DP, 0 , 는 sizeof (DP)); // 初始化为0
// memset 함수 (V, 0는 sizeof (V));
// memset 함수 (0, w,는 sizeof () w);
위한 ( int로 I = 1 ; I ++는, 난 <= N )
{
CIN >> [I] >> w V [I];
}
에 대해 ( int로 I = 1 난 ++; i가 N = < )
{
위해 ( INT= J . 1 ; J <= 가방, J ++ )
{
IF (J> = W [I]) // 배낭 용량은 제품의 양을 충족 할 때
{
// 울트라 배열을 도와 경계 DP
DP [I] [J] = 최대 ( DP [I는 - 1이다. ] [J], DP [I - 1이다. ] [J - W [I]를] + V [I]) // 제품의 가치와 취해진 제품의 최대 값하지 않는다
}
다른
DP를 [I [J]를 DP를 = I - 1이다. ] [J]을; // 제품의 부피보다 작은 배낭 볼륨 항목 만의 최대 값을 취할 수
}
}
COUT << DP [N- [백] << ENDL;
}
반환 0;
}