NYOJ 106 背包问题

来源:互联网 发布:linux应用层使用中断 编辑:程序博客网 时间:2024/06/05 17:50
黄淮学院ACM程序设计协会

问题 C: 背包问题

时间限制: 1 Sec  内存限制: 128 MB
提交: 55  解决: 0
[提交][状态][讨论版]

题目描述

背包限定体积为t(<0t<10000给出n(1<n<100)个物品(可分割),选择物品装入背包中,使背包价值总和最大),
 

输入

K
n t
接下来n行每个物品的价值w,和体积v(0<w,v<1000)

输出

最大的价值(结果保留两位小数)

样例输入

12 76 77 7

样例输出

7.00
#include<stdio.h>
#include<stdlib.h>
struct node
{
    int w;
    int v;
    double l;
}s[110];
int com(const void *a,const void *b)
{
    struct node *aa=(node *)a;
    struct node *bb=(node *)b;
    if(aa->l>bb->l)
       return -1;
    else
      return 1;
}
int main(void)
{
    int k,n,t;
    scanf("%d",&k);
    while(k--)
    {
        scanf("%d %d",&n,&t);
        for(int i=0;i<n;i++)
        {
            scanf("%d %d",&s[i].w,&s[i].v);
            s[i].l=s[i].w/s[i].v;
        }
        qsort(s,n,sizeof(s[0]),com);
        double sum=0.0;
        for(int i=0;i<n;i++)
        {
            if(t-s[i].v>=0)
            {
                t=t-s[i].v;
                sum=sum+s[i].w;
            }
            else
            {
                sum=sum+s[i].l*(s[i].v-t);
                break;
            }
        }
        printf("%.2lf\n",sum);
    }
    return 0;
}
思路详解:使用了结构体的快速排序,这里的struct node * aa=(node *)a;是定义了一个结构体变量,其余不再赘述

0 0
原创粉丝点击