P1048 Recolección de hierbas (Luogu)

Descripción del título

Chen es un niño superdotado y su sueño es convertirse en el mejor médico del mundo. Por esta razón, quería adorar al médico más prestigioso de la zona como su maestro. Para juzgar su aptitud, el médico le presentó un problema difícil. El médico lo llevó a una cueva llena de hierbas y le dijo: "Hijo mío, hay algunas hierbas diferentes en esta cueva. Se necesita algo de tiempo para recoger cada planta, y cada planta tiene su propio valor. Se lo daré a él. Puedes recolectar algunas hierbas durante este período de tiempo. Si eres un niño inteligente, deberías poder maximizar el valor total de las hierbas que recolectas ".

Si es chencheno, ¿puede completar esta tarea?

Formato de entrada y salida

Formato de entrada

La primera línea tiene dos números enteros T (1≤T≤1000) y M (1≤M≤100), separados por un espacio, T representa el tiempo total que se puede usar para recolectar hierbas y M representa el número de hierbas en la cueva.

Cada una de las siguientes M líneas contiene dos números enteros entre 1 y 100 (incluidos 1 y 100), que indican respectivamente el momento de recoger una determinada hierba y el valor de esta hierba.

Formato de salida

Genere el valor total máximo de hierbas que se pueden recolectar dentro del tiempo especificado.

Entrada y salida de muestra

Ingrese # 1

70 3
71 100
69 1
1 2

Salida # 1

3

Instrucciones / consejos

  • Para el 30% de los datos, M≤10;
  • Para todos los datos, M≤100.

Idea: Primero defina tres matrices para representar el valor máximo de recolectar medicamentos en un tiempo específico, un cierto valor y el tiempo requerido para recolectar un medicamento determinado. Defina dos variables para representar el tiempo total de recolección de medicamentos y la cantidad de hierbas en la cueva. El número total, y luego atravesar desde el primer medicamento, retroceder desde el tiempo total del medicamento, calcular de forma recursiva el valor máximo del medicamento en cada momento específico y, finalmente, generar el valor máximo del medicamento para el total hora.

Referencia de código

#include<bits/stdc++.h>
using namespace std;
int f[1001],T,n,v[101],t[101];//v:某种药的价值,t:采某种药所需的时间,T:总时间
int main(){
    
    
	cin>>T>>n;
	for(int i=1;i<=n;i++){
    
    
		cin>>t[i]>>v[i];
	}
	for(int i=1;i<=n;i++){
    
    
		for(int j=T;j>=t[i];j--) {
    
    
            f[j]=max(f[j-t[i]]+v[i], f[j]);
        }
	}
	cout<<f[T];
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/Bertil/article/details/106758278
Recomendado
Clasificación