洛谷 P2240 题解

解决一道贪心问题
(虽然题目叫做背包问题)
心里还是十分喜悦的!!!

P2240 【深基12.例1】部分背包问题

#include
#include
//sort(start end [way])
#include 
//打印小数点几位
//fixed setprecision()
using namespace std;

struct gold{
	int m, v;
	//不用double是因为输入为整数,用double长度>int。
	double p;
	//price
}Gold[101];
//struct Gold and total 

inline bool cmp(gold a, gold b){
	return a.p>b.p;
}
//sort()

int main(){
	int n, t;
	//n:Gold Heap, t:Pack MAX Weight
	cin >> n >> t;
	
	for(int i = 0; i < n; i++){
		cin >>Gold[i].m >> Gold[i].v;
		Gold[i].p = (double)Gold[i].v/(double)Gold[i].m;  
	}
	sort(Gold,Gold+n,cmp);
	//SORT
	double vSum = 0;
	//Sum value 
	int pSum = 0;
	
	for(int i = 0; i < n; i++){
		if(Gold[i].m + pSum <= t)
		{
			vSum +=Gold[i].v;
			pSum += Gold[i].m;
		}else{
			vSum += (double)(t-pSum)*Gold[i].p;
			break;
		}		
	}
	
	cout <<fixed<< setprecision(2) << vSum;
	return 0;
}

你可能感兴趣的:(练习)