本题链接:
1225:金银岛
本题是典型的背包问题,和本蒟蒻之前写过的背包问题一样。
贪心:P2240 【深基12.例1】部分背包问题(洛谷)
本题重点同样在于,先按照均价对每堆财宝进行排序,假如为降序,第一堆就是均价最高的,我们选择将其拿走,然后是第二个…(当然在代码中要加入对承重的判断)
#include<bits/stdc++.h>
using namespace std;
struct Node
{
double w;//重量
double v;//价值
double p;//均价
}a[1001];
double T,b[1001];//T为承重
int N,z;
bool cmp(Node a,Node b)
{
return a.p > b.p;
}
double acc(double T,int N)//计算函数
{
double sum=0;
for (int i = 0; i <N; i++)
{
cin >> a[i].w >> a[i].v;
a[i].p = a[i].v / a[i].w;
}
sort(a ,a+ N,cmp);
for (int i = 0; i < N; i++)
{
if (T - a[i].w > -0.0001)//因为数据类型为double
{
T -= a[i].w;
sum += a[i].v;
}
else