本题链接:
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 {
sum += T * a[i].p;//分割金币,为代码核心点
break;
}
}
return sum;
}
int main()
{
cin >> z;
for (int i = 0; i < z; i++)
{
cin >> T >>

这是一篇关于使用贪心算法解决信息学竞赛题目1225:金银岛的文章。该问题属于背包问题,作者首先提到了类似问题的前序讨论,并指出关键在于按照平均价值对宝藏进行降序排序,优先选取价值最高的宝藏,同时考虑背包的承重限制。核心代码是解决问题的关键部分。
1339

被折叠的 条评论
为什么被折叠?



