给定n种物品和1个背包,物品i的重量是wi,其价值为vi,背包的容量为C。要求选择装入背包的物品,使得装入背包中物品的总价值最大。
Input
每组测试数据包含3行,第1行为n和c,表示有n(0<=n<=400)个物品且背包容量为c (c<=1500),第二行为这n个物品的重量wi(1<=wi<=1000),第三行为这n个物品的价值vi。背包容量和物品重量都为整数。
Output
输出装入背包的最大总价值,每个答案一行。
Sample Input
5 10
2 2 6 5 4
6 3 5 4 6
Sample Output
15
代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXN 410
typedef struct{
int wi;
int vi;
}Goods;
Goods goods[MAXN];
//算法思路:贪心算法,每次都向背包里面装入价值最大的物品,如果装入超过容量c
int cmp(const void *a, const void *b)
{
return (*(Goods*)a).vi - (*(Goods*)b).vi;
}
int main()
{
int n, c, i,sum = 0, total = 0;
scanf("%d %d", &n, &c);
for(i = 0; i < n; i++)
{
scanf("%d", &goods[i].wi);
}
for(i = 0; i < n; i++)
{
scanf("%d", &goods[i].vi);
}
qsort(goods, n, sizeof(Goods),cmp);
for(i = n - 1; i >= 0; i--)
{
sum += goods[i].wi;
if(sum <= c)
{
total += goods[i].vi;
}else
{
sum -= goods[i].wi;
}
}
printf("%d\n", total);
return 0;
}
分享到:
相关推荐
### 0-1背包问题(贪心算法)C语言源程序解析 #### 一、问题背景及概述 0-1背包问题是一种经典的组合优化问题,在实际应用中有着广泛的应用场景,比如物流分配、资源调度等领域。该问题的核心是:给定一系列物品...
### 0-1背包问题分支界限法求解——C语言实现 #### 一、背景介绍 在计算机科学中,背包问题是一类优化问题的经典案例,它涉及到如何在满足一定约束条件下(例如背包的最大承重),从一系列物品中选择最优组合以达到...
0-1背包问题的实现代码,可直接编译执行,算法经过了两步的优化
总结来说,0-1背包问题的核心在于理解动态规划思想,并能用C语言实现动态规划算法。这个问题的解决有助于理解和掌握递推关系、状态转移以及空间优化等编程技巧,对于学习算法和数据结构有着重要的意义。
### 动态规划法与回溯法解决0-1背包问题 #### 一、实验目的与背景 0-1背包问题是一种经典的组合优化问题,在实际应用中有着广泛的用途,例如资源分配、投资组合等问题都可以抽象成背包问题的形式。本实验旨在通过...
动态规划求解0-1背包问题的改进算法完整解释 在计算机算法设计与分析中,动态规划法是解决背包问题的常用方法之一。所谓背包问题,是指在有限的背包容量下,如何选择物品来达到最大价值的问题。在本文中,我们将对...
0-1背包问题是一种经典的计算机科学中的组合优化问题,它源于实际生活中的资源分配问题,例如在有限的容量下选择最有价值的物品进行携带。在这个问题中,我们有一组物品,每种物品都有一个重量和一个价值,目标是...
在C语言中实现0-1背包问题,首先需要定义物品的结构体,包含重量`weight`和价值`value`属性,然后声明动态规划数组`dp`,接着按照上述逻辑填充数组。在代码`0-1背包问题 动态规划法.cpp`中,可以看到如何定义这些...
利用动态规划方法求解经典0-1背包问题,仅供参考,欢迎指正
0-1背包问题 C语言 源程序 经典的回溯算法编程题
### C语言实现0-1背包问题 #### 一、引言 在计算机科学领域,背包问题是一类经典的组合优化问题,通常被用来测试算法的设计能力。0-1背包问题是其中的一种,它指的是从一系列物品中选择一些放入背包,每个物品只能...
它们常被用于解决复杂的组合优化问题,如0-1背包问题和货箱装船问题。下面我们将深入探讨这两种算法及其在实际问题中的应用。 **分支定界算法** 分支定界是一种全局优化方法,它通过系统地搜索问题的所有可能解...
在0-1背包问题中,这种策略尤为适用。0-1背包问题是一个经典的组合优化问题,它的目标是在容量有限的背包中放入物品,使得背包中的物品总价值最大,但每个物品只能被取走或不取,不能分割。 0-1背包问题的定义如下...
利用MATLAB退火算法解决0-1背包问题。数据直接在主函数内,如有需要,直接替换即可
分别用回溯法和分支限界法求解0-1背包问题 本实验报告的主要内容是使用回溯法和分支限界法解决0-1背包问题。0-1背包问题是指给定n种物品和一个背包,物品i的重量是Wi,其价值为Vi,背包的容量为C。应如何选择装入...
总结来说,这个实验涵盖了数据结构、算法和编程实践等多个IT领域的知识点,包括哈夫曼编码的贪心算法实现、回溯法在解决0-1背包问题和装载问题中的应用,以及对不同算法效率的比较分析。通过这样的实验,学生能够...
在C语言中实现0-1背包问题,通常会用到动态规划(Dynamic Programming)方法。动态规划是一种通过将大问题分解为小问题并存储中间结果来求解的方法,它避免了重复计算,提高了效率。0-1背包问题的动态规划解决方案...
### 0-1背包问题(C语言源码) #### 知识点概览 1. **0-1背包问题的概念** 2. **动态规划解决0-1背包问题** 3. **C语言实现0-1背包问题** 4. **排序算法在0-1背包问题中的应用** #### 0-1背包问题的概念 0-1背包...