题目链接
题意:
有一个固定承受重量的背包和一堆具有重量和价值的可分割物品,求最多能装多少价值的物品。
思路:
一道非常明显的贪心题(不知道为啥题目带背包),我们只需要将性价比最高的物品优先装入背包中即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=1e6+7;
const int mod=1e9+7;
const int inf=0x7fffffff;
const double pi=3.1415926535;
struct Node
{
int w,v;
}a[110];
bool cmp(Node aa,Node bb)
{
return aa.v*bb.w>aa.w*bb.v;
}
signed main()
{
int n,m;
cin>>n>>m;
double ans=0;
for(int i=1;i<=n;i++)
{
cin>>a[i].w>>a[i].v;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(a[i].w<=m)
{
ans+=a[i].v,m-=a[i].w;
}
else
{
ans+=a[i].v*m*1.0/(a[i].w*1.0);
break;
}
}
printf("%.2lf",ans);
return 0;
}
本文探讨了一种背包问题的解决策略,通过贪心算法实现。具体地,面对一个固定承重的背包和一系列可分割的物品,文章介绍了一种方法来最大化装载物品的价值。该方法首先计算每件物品的价值密度,然后按价值密度降序排列,优先选择价值密度高的物品装入背包,直至背包容量用尽或所有物品被考虑。
693

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



