P2240部分揹包問題(貪心法)

P2240部分揹包問題

題目選自洛谷

在這裏插入圖片描述
題目思路:用結構體存儲金幣總量和價值用排序優先拿走單位價格大的金幣。代碼附下:

#include<stdio.h>
#include<cstdio>
#include<iostream>
#include<algorithm> 
using namespace std;

struct node
{
   
   
	int m;
	int v;
	double dw;
}pp[105];

int cmp(node pp,node b)
{
   
   
	return pp.dw>b.dw;
}

int main()
{
   
   
	int n,t,z=0;
	double v1=0;
	cin>>n>>t;
	for(int i=0;i<n;i++)
	{
   
   
		cin>>pp[i].m>>pp[i].v;
		pp[i].dw=(double)pp[i].v/pp[i].m;
	}
	sort(pp,pp+n,cmp);
	for(int i=0;i<n;i++)
	{
   
   
		if(t-pp[i].m>=0)
		{
   
   
			t-=pp[i].m;
			v1+=pp[i].v;
			z++;
		}else
		{
   
   
			v1+=(pp[z].dw*t);
			break;
		}
			
	}
	printf("%.2lf",v1);
	return 0;
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章