贪心法求解背包问题

#include<stdio.h>

struct A{
    double w;
    double v;
    double xingjiabi;
}a[100],p;

void QuickSort(A a[],int numsize)
{
    int i=0,j=numsize-1;
    A p=a[0];
    if(numsize>1)
    {
        while(i<j)
        {
            for(;j>i;j--)
                if(a[j].xingjiabi<p.xingjiabi)
                {
                    a[i]=a[j];
                    break;
                }
            for(;i<j;i++)
                if(a[i].xingjiabi>p.xingjiabi)
                {
                    a[j]=a[i];
                    break;
                }
        }
        a[i]=p;
        QuickSort(a,i);
        QuickSort(a+i+1,numsize-1-i);
    }
}

int main()
{
    int n,i,wi,vi,C,Value;
    scanf("%d",&n);//物品个数 
    for(i=0;i<n;i++)
    {
        scanf("%lf%lf",&a[i].w,&a[i].v);//重量 价值 
        a[i].xingjiabi = a[i].v/a[i].w;
    }
    QuickSort(a,n);
    scanf("%d",&C);//背包容量 
    Value=0;
    for(i=n-1;i>=0;i--)
    {
        if(a[i].w<=C)
        {
            Value+=a[i].v;
            C-=a[i].w;
        }
    } 
    printf("%d
",Value); 
    return 0;
}
原文地址:https://www.cnblogs.com/suthui/p/3809695.html