입학 시험 훈련 알고리즘
시간 제한 : 메모리 제한을 1.0s : 256.0MB를
문제 설명
첸 재능있는 아이였다, 그의 꿈은 세계 최고의 의사가되는 것입니다. 이를 위해, 그는 교사로서 가장 권위있는 의사의 주변에 예배하고 싶었다. 의사는 자신의 자격을 결정하기 위해, 그에게 문제를했다. 의사는 허브의 전체 동굴에 데려 갔다는 그에게 말한다 :. "아이들이 동굴은 각 공장을 따기 약간의 시간이 필요, 일부 다른 나물을 가지고, 각 공장은 자신의 가치를 가지고 있으며 나는 줄 것이다 스마트 아이가 있다면 당신은 약간의 시간,이 시간 동안, 당신은 당신이 허브의 총 가치를 만들기 위해주의해야한다, 몇 가지 허브의 최대 값을 선택할 수 있습니다. "
당신은 첸을 경우, 당신은이 작업을 수행 할 수 있습니다 그것은?
입력 형식
제 1 라인의 두 정수 T (1 <= T <= 갖는다 1000) 및 M (1 <= M <= 100) 의 공간으로 구분하고, T는 위해 M을 전체 시간 사용할 수 허브를 나타낸다 허브 동굴의 수. 다음 M 라인이 각각 (1, 100 포함) (100) 사이에 1 개의 정수를 포함하고, 각각 허브 시간이 균주와 허브 고른 변형의 값을 나타낸다.
출력 형식은
규정 된 시간 내에 나타내는 하나의 정수가 포함 라인을 포함, 당신은에 허브의 최대 총 값을 채택 할 수있다.
입력 샘플
(70) (3)
71 100
69 (1)
. (1) (2)
출력 샘플
3
데이터 크기 및 규칙
30 %, M의 데이터 <= 10;
모든 데이터, M <= 100 대.
분석 : 세트 의 총 시간 나타낸다
받는 제 1 처리
재발 관계가 얻어 질 수있는 전체 스트레인 허브의 최대 값,
#include <stdio.h>
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int T, M;
int time[105] = { 0 }, value[105] = { 0 };
int f[105][1005] = { 0 };
scanf("%d %d", &T, &M);
for (int i = 1; i <= M; ++i)
scanf("%d %d", &time[i], &value[i]);
for (int i = 1; i <= M; ++i)
{
for (int t = 0; t < time[i]; ++t)
f[i][t] = f[i-1][t];
for (int t = time[i]; t <= T; ++t)
f[i][t] = max(f[i-1][t], f[i-1][t-time[i]] + value[i]);
}
printf("%d", f[M][T]);
return 0;
}