部分背包问题

简介: 题目描述 给定一个最大载重量为M的卡车和N种食品,有食盐,白糖,大米等。已知第i种食品的最多拥有Wi公斤,其商品价值为Vi元/公斤,编程确定一个装货方案,使得装入卡车中的所有物品总价值最大。输入第一行输入两个整数M和N,用空格隔开第二行到第N+1行每一行输入两个数wi和vi,表示第i种物品的重量和单位价值。

题目描述
给定一个最大载重量为M的卡车和N种食品,有食盐,白糖,大米等。
已知第i种食品的最多拥有Wi公斤,其商品价值为Vi元/公斤,
编程确定一个装货方案,使得装入卡车中的所有物品总价值最大。
输入
第一行输入两个整数M和N,用空格隔开
第二行到第N+1行每一行输入两个数wi和vi,表示第i种物品的重量和单位价值。
输出
使得装货价值最大的装货方案和总价值。
先输出若干行,每一行输出货物编号和该种货物装货的重量。
最后一行输出该种装货方案所装物品的总价值。

【算法分析】
贪心算法策略:因为每一个物品都可以分割成单位块,
单位块的利益越大显然总收益越大,所以它局部最优满足全局最优,
可以用贪心法解答,方法如下:先将单位块收益按从大到小进行排列,
然后用循环从单位块收益最大的取起,直到不能取为止便得到了最优解。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 struct obj
 4 {
 5     int id;
 6     double w;
 7     double v;
 8 };
 9 int cmp(const void *a,const void *b)
10 {
11     double ans= ((struct obj*)b)->v -((struct obj*)a)->v;
12     if(ans<0) return -1;
13     else if(ans>0) return 1;
14     else return 0;
15 }
16 int main()
17 {
18     double M;
19     int N;
20     struct obj *a;
21     int i;
22     double maxV=0;
23     
24     scanf("%lf%d",&M,&N);
25     
26     if(M<=0)
27     {
28         printf("输入的数据可能不正确:汽车空间不能为0或负数。\n");
29         return 0;
30     }
31     
32     a=(struct obj *)malloc(N*sizeof(struct obj));
33     for(i=0;i<N;i++)
34     {
35         a[i].id=i+1;
36         scanf("%lf%lf",&a[i].w,&a[i].v);
37     }
38     
39     qsort(a,N,sizeof(struct obj),cmp);
40     
41     for(i=0;i<N&&M>0;i++)
42     {
43         if(a[i].w<=M)
44         {
45             printf("%d %lf\n",a[i].id,a[i].w);
46             M=M-a[i].w;
47             maxV=maxV+a[i].v*a[i].w;
48         }
49         else
50         {
51             printf("%d %lf\n",a[i].id,M);
52             maxV=maxV+M*a[i].v;
53             M=0;
54             break;
55         }
56     }
57     printf("%lf\n",maxV);
58     free(a);
59     return 0;
60 }

 

相关文章
|
12月前
|
Java Python
Python学习六:面向对象编程(上)
这篇文章是关于Python面向对象编程的基础知识,包括类和对象的概念、实例方法、属性、self关键字以及魔法方法等。
94 0
|
编解码 开发者
Netty Review - 深入理解Netty: ChannelHandler的生命周期与事件处理机制
Netty Review - 深入理解Netty: ChannelHandler的生命周期与事件处理机制
282 0
|
存储 SQL 数据可视化
没有好的数据可视化分析工具,如何做好数据洞察,如何助力企业数据化转型
随着企业信息化建设程度不断加强,随之而来的企业经营数据呈爆发式增长,传统粗放 式的管理手段难以支撑现代化企业发展需要,越来越多的企业开始意识到数据的重要性,希 望通过大数据分析来驱动来实现企业智慧化运营,提升企业业务增长。 然而各行各业的企业在实践数据化运营的道路上面临着巨大的挑战,通过与大量企业进 行沟通,交流我们将企业面临的问题归纳整理为如下几点信息:
没有好的数据可视化分析工具,如何做好数据洞察,如何助力企业数据化转型
|
关系型数据库 数据库 MySQL
阿里云数据库有哪几个热门数据库产品?要注意事项及优惠?
在阿里云众多数据库产品中,最热门的是关系型数据库下的云数据库 RDS MySQL 版、云数据库 RDS SQL Server 版、云数据库 RDS PostgreSQL 版
|
Go 开发工具 git
在 GitHub 上构建一个看上去正规的 Golang 项目
接触 golang 时间很长,但是真正动手开始写 golang 也就是在最近。跟着我在 GitHub 上构建一个看上去正规的 Golang 项目。
6715 0
|
安全 Linux Shell
linux系统初始化脚本
给大家分享一个工作中很实用的系统初始化脚本,其实就是各种命令的集合!当然了,如果有cobber就更嗨了~~ 点击(此处)折叠或打开 #!/bin/bash ###此脚本用于初始化系统,也就是刚刚配置完网卡的服务器用于初始化.
1392 0
|
10天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!