分析:背包问题用贪心算法解决,首先就是计算每个物品的性价比(价格/重量),然后进行排序,先装性价比高的物品再依次装入性价比第二、三......高的,如果背包剩余量小于物品的重量,则可以将物品进行拆分,将部分物品装进背包中。

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int w,v;//重量,价值
    double p;
}a[1005];

int cmp(node a,node b)
{
    return a.p>b.p;
}

int main()
{
    int n,c;
    double ans=0;
    cin>>n>>c;
    if(n==0 || c==0) return 0;
    for(int i=0;i<n;i++)
        cin>>a[i].v;
    for(int i=0;i<n;i++)
        cin>>a[i].w;
    for(int i=0;i<n;i++)
        a[i].p=(double)a[i].v/a[i].w;//物品的价值比上重量
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++)
    {
        if(a[i].w<=c)
        {
            ans+=a[i].v;
            c-=a[i].w;
        }
        else
        {
            ans+=a[i].p*c;
            break;
        }
    }
    cout<<ans;
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐