Whuacmers는 coins.They 값 A1, A2, A3 ... Silverland 달러의 동전을 사용합니다. 어느 날 Hibix는 지갑을 열어 어떤 동전이 있었다 발견했다. 그는 근처의 가게에서 아주 좋은 시계를 구입하기로 결정했다. 그는 (변경 없음) 정확한 가격을 지불하고 싶어 그는 가격이 아닌 더 m.But 이상의 그는 시계의 정확한 가격을 알고하지 않은 것입니다 알려져 있습니다.
그런 다음 값 A1, A2, A3 ... 토니의 동전의 수에 대응하는 N m, A1, A2, A3 ...는 AND C1, C2, C3 ... cn이 판독 프로그램을 작성한다 토니는 사용에게이 동전을 지불 할 수있는 얼마나 많은 가격 (m에 양식 1) 계산합니다.
그런 다음 값 A1, A2, A3 ... 토니의 동전의 수에 대응하는 N m, A1, A2, A3 ...는 AND C1, C2, C3 ... cn이 판독 프로그램을 작성한다 토니는 사용에게이 동전을 지불 할 수있는 얼마나 많은 가격 (m에 양식 1) 계산합니다.
InputThe 입력은 여러 테스트 케이스가 포함되어 있습니다. 각 테스트 케이스의 첫 번째 라인은 국지적 번째 줄은 A1, A2, A3 ... AN, C1, C2, C3를 나타내는 2N 정수를 포함 두 정수 N (1 ≤ N ≤ 100) m (m ≤ 100,000)을 포함한다. ..Cn (1 ≤ ≤ 아이 100000,1 CI ≤ ≤ 1,000). 마지막 테스트 케이스가 테스트 케이스 출력 zeros.OutputFor 두 번의 line.Sample 입력에 응답 뒤에
10 3 1 2 4 2 1 2 5 1 2 4 1 0 0
샘플 출력
8 4
사용법 #include <iostream> #INCLUDE <CString을> 사용 스페이스 성병; CONST INT maxn = 100010 ; int로 [maxn] DP; int로 주 () { INT의 N, m을; int로 [maxn]을 A [maxn, B 단계; INT의 합 [maxn]; // 每个硬币出现次数 동안 (CIN N >> >> N && && m m) { memset 함수 (DP, 0 , 는 sizeof (DP)); 위한 ( INT 난 = 0 ; I <N; I ++ ) CIN >> A [I]; 위한 ( INT 난 = 0 ; I <N; I ++ ) CIN >> B [I]; DP [ 0 ] = 1 ; INT ANS = 0 ; 위한 ( INT 난 = 0 ; I <N; I ++ ) { memset 함수 (합계 0 , 는 sizeof (합)); 대 ( INT J = A [i]를, J <= m; J ++ ) { 경우 (! DP [J] && DP [JA [I] && 합 [JA [I] < B [I]) { DP [J]= 1 ; 합 [J] = 합계 [JA [I] + 1 ; ANS ++ ; } } } COUT << ANS << ENDL; } 반환 0 ; }