욕심 산법 - 최 적 화 된 적재
12003 단어 욕심 산법
문제 설명: 한 배의 적재량 은 C 입 니 다. 현재 n 개의 물건 을 드 리 겠 습 니 다. 그 중에서 모든 물건 의 무 게 는 Wi 입 니 다. 가능 한 한 많은 물건 을 배 에 실 어 달라 고 요구 합 니 다.
총 n + 1 줄 의 첫 번 째 줄 n 개 물체, 총 중량 C 뒤에 n 줄 을 입력 하고 줄 마다 물체 의 무게 wi)
가장 많은 아 이 템 을 출력 한 수량
샘플 입력
5 100
78
22
13
56
64
[샘플 출력]
3
전략 분석: 문제 가 가능 한 한 많은 물품 을 담 으 라 고 요구 하기 때문에 우 리 는 매번 물품 을 선택 할 때 가능 한 한 가 벼 운 물품 을 선택해 야 한다 고 생각 하기 쉽다. 그래 야 가능 한 한 많은 것 을 선택 할 수 있다. 따라서 1. 무게 에 따라 작은 것 부터 큰 것 까지 2. 순환 하여 옮 겨 다 닐 수 있다. 현재 무게 가 3 을 담 을 수 있 는 지, 담 을 수 있 는 것 이 있 는 것 이 있 는 지, 그렇지 않 으 면 순환 에서 물 러 날 수 있다.
코드
#include <cstdio>
#include <algorithm>
#define MAXN 1000 + 10
int w[MAXN];
int main() {
int n, C, now = 0, cnt = 0;
scanf("%d%d", &n, &C);
for(int i = 1; i <= n; i++)
scanf("%d", &w[i]);
std::sort(w+1, w+1+n);
for(int i = 1; i <= n; i++) {
if(now + w[i] <= C) { // i
cnt++;
now += w[i];
}else
break;
}
printf("%d
", cnt);
return 0;
}
질문
문제 설명: 현재 최대 적재량 이 M 인 트럭 과 N 가지 식품 이 있 는데 모든 식품 은 벌 크 로 나 눌 수 있다.이미 알 고 있 는 i 종의 식품 은 최대 Wi 킬로그램 을 가지 고 있 으 며, 그 상품 의 가 치 는 Vi 위안 / 킬로그램 입 니 다. 트럭 에 실 린 모든 물품 의 총 가치 가 가장 클 수 있 도록 선적 방안 을 확정 하 십시오.
n + 1 줄 의 첫 번 째 줄 을 입력 하 십시오: 두 개의 수 를 입력 하 십시오. 각각 화물차 의 최대 적재량 m (킬로그램) 과 화물 의 종류 n 다음 n 줄: 줄 당 두 개의 수, 첫 번 째 는 화물 의 보 유량 wi 킬로그램, 화물 의 단가 vi 원 / 킬로그램 1 ≤ m, n, wi, vi ≤ 100
출력 개수, 최대 가치
샘플 입력
5 100
78
22
13
56
64
샘플 출력
3
전략 분석: 제목 은 모든 화물 을 분리 할 수 있 고 불 러 오 는 총 가치 가 가장 크다 는 것 을 설명 한다. 그러면 우 리 는 모든 물품 의 단위 가 치 를 계산 한 다음 에 단위 가치 에 따라 큰 것 에서 작은 것 으로 순 서 를 매 겨 야 한다. 따라서 1. 데 이 터 를 읽 을 때 단위 가치 2 를 계산 하고 단위 가치 에 따라 큰 것 에서 작은 것 으로 순 서 를 매 길 수 있다.반복 해서 옮 겨 다 니 며 현재 의 가장 큰 가 치 를 담 을 수 있 는 것 은 모두 담 습 니 다. 그렇지 않 으 면 남 은 공간 을 가득 채 웁 니 다.
코드
#include<cstdio>
#include<algorithm>
#define MAXN 100 + 15
struct food{
int w;
int v;
}s[MAXN];
bool cmp(food a, food b) { //
return a.v > b.v;
}
int main() {
int m, n, sum = 0, weight = 0, j = 1;
scanf("%d%d", &m, &n);
for(int i = 1; i <= n; i++) {
scanf("%d %d", &s[i].w, &s[i].v);
}
std::sort(s+1, s+1+n, cmp);
while(weight + s[j].w <= m) { //
weight += s[j].w;
sum += s[j].w * s[j].v;
j++;
}
sum += (m - weight) * s[j].v; //
printf("%d
", sum);
return 0;
}
소결: 어떻게 하면 매번 의 선택 이익 화 를 최대 로 할 수 있 는 지 알 아야 한다 (거의 모든 욕심 이 먼저 순 위 를 매 겨 야 한다)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
탐욕 알고리즘 Problem M 1012 이미 알 고 있 는 멱 과 결과 베이스Problem M Problem ID:1012 간단 한 제목: n 값 과 p 값 을 제시 하고 수치 k 를 구하 여 k 의 n 제곱 을 p 와 같 게 합 니 다. 문제 풀이 사고방식 형성 과정: pow () 함 수...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.