algoritmo --El comprador

título Descripción

Una clase de sueño celebró una fiesta, por supuesto, esencial para comer, un sueño responsable de la tarea de adquisición, obtuvo una lista, lo anterior indica que la popularidad de los diferentes alimentos, un sueño necesita un poco precio mayor popularidad tanto como sea posible para lograr! Por ejemplo, la popularidad de 20 semillas, semillas de melón precio es de $ 50, entonces, si un sueño elige comprar semillas, tendrá un costo de $ 50, pero la popularidad ha aumentado en un 20. Para evitar la monotonía de los alimentos, cada alimento sólo puede comprar uno, no se puede repetir la compra. Un sueño ahora necesita saber cómo adquirir para lograr la máxima popularidad, ¿puedes ayudarlo?

entrada

Una pluralidad de conjuntos de datos de entrada, una primera línea de entrada de cada uno de los dos números enteros positivos M y N (M <100 && n <1000), respectivamente, y el número de seleccionable en la lista de dinero A Categorías de eliminación de sueño de artículos. Las siguientes líneas N tiene dos números enteros positivos, respectivamente, y el precio de cada artículo de su popularidad (numerados 1 a N).

exportación

Si no se compran artículos, entonces la salida de los primeros actos para lograr la máxima popularidad. No hay necesidad de comprar artículos de segunda línea (si hay varios tipos posibles de la producción lexicográfico frontal), separados por espacios cada número; si no hay elementos se pueden comprar, sólo una línea de salida, el número 0.

entrada de la muestra

10 4
100 5
5 5
5 5
10 10

Ejemplo de salida

10
2 3

código

#include<iostream>
#include<algorithm>
using namespace std;
typedef struct{
	int price;
	int popular;
	int i;
}Gs;
Gs p[1000];
bool cmp(Gs p1, Gs p2){
	return (p1.popular /p1.price )>(p2.popular /p2.price );
}
int main(){
	int ans, s ,a[1000];
	int M,N;
	while(cin>>M>>N){
		ans = 0, s = 0;
		for(int i = 0; i < N; i++){
			cin>>p[i].price >>p[i].popular ;
			p[i].i = i + 1;
		}
		sort(p, p + N, cmp);
		for(int i = 0; i < N && M >0; i++){
			if(M - p[i].price < 0) continue;
			M -= p[i].price ;
			ans += p[i].popular ;
			a[s++] = p[i].i ;
		}
		if(s == 0) cout<<"0"<<endl;
		else {
			cout<< ans << endl;
			sort( a, a+s);
			for(int i = 0; i < s - 1; i++)
				cout<<a[i] <<' ';
			cout<<a[s-1]<<endl;
		}
	}
	return 0;
} 

pensamiento

1. El segundo descubrimiento de esta pregunta era utilizar un relativamente simple;

2. El gran avance es de encontrar la manera de conseguir la popularidad máxima en el limitado dinero;

3. En primer lugar, el precio de su popularidad de las partidas individuales se clasifican, la relación de la más grande, más rentable;

4. A continuación, si el dinero bolsa puede comprar artículos de alto costo, si es posible, se reducirá la bolsa del dinero, de lo contrario, saltar, repetir esta operación;

5. Cabe señalar que el número sino también la exportación de bienes, que se se ordenará el código, podrían alterar el orden establecido, ¿cómo se puede solucionar? Número de artículo i se puede añadir dentro de la estructura, y proporciona en la entrada.

Publicado 13 artículos originales · ganado elogios 149 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_45703420/article/details/105298678
Recomendado
Clasificación