Codiciosos algoritmo - obtener el máximo valor en un determinado espacio

Ejemplos de algoritmo voraz, el espacio de instalación más rentable es tesoros limitados: la solución óptima
mediante el uso de archivos de cabecera iostream, el algoritmo
aquí directamente con la universal de cabecera bits / STDC ++ h.

#include<bits/stdc++.h>
using namespace std;
const int M=1000005;  
struct three{
	double w;	//单个宝物所占空间 
	double v;	//单个宝物的价值 
	double p;	// 性价比 
}s[M];
bool cmp(three a,three b)
{
	return a.p>b.p;		//自定义cmp给sort函数根据p即性价比实现从大到小的排列 
} 
int main(){
	int n;		//n表示宝物的数量
	double m;	//m表示空间大小
	cout<<"请输入宝物数量和空间大小"<<endl;
	cin>>n>>m;
	cout<<"请输入宝物所占空间和价值"<<endl;
	for(int i=0;i<n;i++){
		cin>>s[i].w>>s[i].v;
		s[i].p=s[i].v/s[i].w;
	} 
	sort(s,s+n,cmp);
	double sum=0.0; 	//sum表示价值总和
	for(int i=0;i<n;i++){
		if(m>s[i].w){  	//宝物所占空间未超出剩余空间 
			m-=s[i].w;
			sum+=s[i].v;
		}
		else			//宝物所占空间超出剩余空间 
		{
			sum+=m*s[i].p; 	//部分装入计算价值
			break; 
		}
	} 
	cout<<"装入宝物的最大价值= "<<sum<<endl;
	return 0; 
} 
Publicado tres artículos originales · ganado elogios 0 · Vistas 41

Supongo que te gusta

Origin blog.csdn.net/qq_44660524/article/details/105033898
Recomendado
Clasificación