로곡 P1048 채약(DP, 0-1 가방)
로곡 P1048 채약(DP, 0-1 가방)
제목 설명
진진은 타고난 총명한 아이로 그의 꿈은 세계에서 가장 위대한 의사가 되는 것이다.그래서 그는 근처에서 가장 명망이 높은 의사를 스승으로 모시고 싶었다.의사는 그의 자질을 판단하기 위해 그에게 어려운 문제를 하나 냈다.의사는 그를 약초가 널려 있는 동굴로 데리고 가서 말했다. "얘야, 이 동굴에는 다른 약초가 있어. 한 그루씩 따는 데 시간이 좀 걸려. 한 그루마다 가치가 있어. 내가 시간을 줄게. 그 동안 약초를 따도 돼. 똑똑한 아이라면 채취한 약초의 총 가치가 가장 클 거야."
만약 네가 진진이라면, 너는 이 임무를 완성할 수 있니?
입력 출력 형식
입력 형식:
입력 파일 medic.첫 줄에는 두 개의 정수 T(1<=T<=1000)와 M(1<=M<=100)이 있는데 한 칸으로 나누면 T는 모두 약을 채취할 수 있는 시간을 대표하고 M은 동굴 안의 약초의 수를 대표한다.다음 M행은 줄마다 1에서 100 사이(1과 100 포함)의 정수 두 개를 포함하여 각각 어떤 약초를 따는 시간과 이 약초의 가치를 나타낸다.
출력 형식:
출력 파일 medic.out는 한 줄을 포함하고 이 줄은 하나의 정수만 포함하며 규정된 시간 안에 채취할 수 있는 약초의 최대 총 가치를 나타낸다.
출력 샘플 가져오기
샘플 #1 입력:
70 3
71 100
69 1
1 2
샘플 내보내기 #1:
3
설명
30% 데이터의 경우 M <= 10;
모든 데이터에 대해 M <= 100.
NOIP2005 보급팀 세 번째 문제
문제 풀이 분석
0-1 가방 문제, 동적 기획 방법으로 해답을 구합니다.#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define M 102
int t, m, ti[M], pr[M], f[1002];
void get_i(int &x){
char ch = getchar();
x = 0;
while(!isdigit(ch)) ch = getchar();
while(isdigit(ch)){
x = x * 10 + ch - '0';
ch = getchar();
}
}
int main(){
ios::sync_with_stdio(false);
int i, j;
get_i(t), get_i(m);
for(i=1; i<=m; i++){
get_i(ti[i]), get_i(pr[i]);
}
for(i=1; i<=m; i++)
for(j=t; j>=ti[i]; j--){
f[j] = max(f[j], f[j-ti[i]]+pr[i]);
}
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)
의 해설 기사입니다.
해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다.
※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다.
문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define M 102
int t, m, ti[M], pr[M], f[1002];
void get_i(int &x){
char ch = getchar();
x = 0;
while(!isdigit(ch)) ch = getchar();
while(isdigit(ch)){
x = x * 10 + ch - '0';
ch = getchar();
}
}
int main(){
ios::sync_with_stdio(false);
int i, j;
get_i(t), get_i(m);
for(i=1; i<=m; i++){
get_i(ti[i]), get_i(pr[i]);
}
for(i=1; i<=m; i++)
for(j=t; j>=ti[i]; j--){
f[j] = max(f[j], f[j-ti[i]]+pr[i]);
}
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.