Luogu P2240 [Deep Foundation 12. Ejemplo 1] Solución a algunos problemas de mochila

Es una pregunta codiciosa muy simple, y puedo responderla fácilmente una vez (porque se ignora la precisión de los datos, por lo que la primera vez es 0 puntos, jajaja)

No hay una operación redundante, solo abra una matriz de estructura, clasifique primero la que tiene el precio unitario más alto y luego recorra y juzgue.

A continuación se muestra el código AC:

#include<bits/stdc++.h>  //万能头
using namespace std;

int main(void)
{  
   struct node //定义一个结构体数组
   {
   	double sl;
   	double zj;
   	double dj;
   }; 
   struct node q[101];
   double n,backpack,sum=0;
   cin>>n>>backpack;
   for(int i=0;i<n;i++){
   	cin>>q[i].sl>>q[i].zj;
   	q[i].dj=q[i].zj/q[i].sl;
   }
   for(int i=0;i<n;i++){    //冒泡排序
   	for(int j=i+1;j<n;j++){
   		if(q[j].dj>q[i].dj){
   			struct Q temp;
   			temp=q[i];
   			q[i]=q[j];
   			q[j]=temp;
		   }
	   }
   }
   for(int i=0;i<n;i++){
   	if(backpack-q[i].sl>-0.000001){sum+=q[i].zj;backpack-=q[i].sl;}  //double型不能直接相等
   	else {sum+=(backpack*q[i].dj);break;}
   }
   printf("%.2f",sum);
   return 0;	
} 

Ah ja ja ja ja, la versión mejorada está llegando.

Cuando usaba la clasificación de burbujas, siempre estaba descontento, así que me preguntaba si podría usar sort para ordenar la matriz de estructuras, y luego escribí una versión de clasificación usando sort No preguntes, solo busco la perfección. hombre.

#include<bits/stdc++.h>
using namespace std;

struct node
   {
   	double  sl;
   	double  zj;
   	double  dj;
   }q[101]; 
bool comparison(node a,node b) //自定义sort的比较方法。
{
	return a.dj>b.dj;
}
int main(void)
{  

   int n;  如果将n定义成double,在sort函数中将会报错。
   double backpack,sum=0;
   cin>>n>>backpack;
   for(int i=0;i<n;i++){
   	cin>>q[i].sl>>q[i].zj;
   	q[i].dj=q[i].zj/q[i].sl;
   }
   sort(q,q+n,comparison);  //好美好快好简洁
   for(int i=0;i<n;i++){
   	if(backpack-q[i].sl>-0.000001){sum+=q[i].zj;backpack-=q[i].sl;}
   	else {sum+=(backpack*q[i].dj);break;}
   }
   printf("%.2f",sum);
   return 0;	
} 

Haga una tarjeta todos los días, buenas noches a todos.

おすすめ

転載: blog.csdn.net/qq_62440805/article/details/122815520