贪心法求解背包问题

#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\n",Value); 

    return 0;

}

 

你可能感兴趣的:(问题)