贪心算法-背包问题2
来源:互联网 发布:手机中通抢单软件 编辑:程序博客网 时间:2024/05/17 03:31
对上次的C语言代码做了一些修改,可以打印出装进背包里面的物品的顺序编号。
// 贪心算法-背包问题-解向量.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <algorithm>using namespace std;#define N 3int flag = 0;//装进物品的总数标记typedef struct{ int w;//重量 int v;//价值 double c; //性价比 int index;}bag;bool cmp(bag a, bag b){ return a.c > b.c;}double GreedyKnapsack(bag a[], int n, double weight){ //返回最大价值 double c_left = weight; //背包的剩余容量 int i = 0; double b = 0; //获得的价值 while (i < n&&a[i].w < c_left) { //能够放下整个的物品时 c_left = c_left - a[i].w; b = b + a[i].v; ++i; ++flag; } if (i < n) {//只能放下物品的一部分时 b = b + a[i].v*(c_left / a[i].w); ++flag; } return b;}int main(){ int sum_weight; double value; // 书包所能容纳的最大价值 printf("请输入书包的负重:"); scanf_s("%d", &sum_weight); bag bags[N]; printf("请依次输入%d种物品的重量和价值:\n", N); for (int i = 0; i < N; i++) { printf("物品%d\t", i); scanf_s("%d", &bags[i].w); scanf_s("%d", &bags[i].v); bags[i].index = i; bags[i].c = (bags[i].v*1.0) / bags[i].w; } sort(bags, bags + N, cmp); value = GreedyKnapsack(bags, N, sum_weight); printf("该书包所能容纳的最大价值是:%.2f\n", value); printf("装进书包里的物品顺序是:"); for (int i = 0; i < flag; i++) printf("%d", bags[i].index); printf("\n\n"); return 0;}
0 0
- 贪心算法-背包问题2
- 贪心算法 - 背包问题
- 贪心算法----背包问题
- 【贪心算法】:背包问题
- 贪心算法-背包问题
- 贪心算法 背包问题
- 贪心算法-背包问题
- 【贪心算法】背包问题
- 贪心算法-背包问题
- 贪心算法--背包问题
- 背包问题-贪心算法
- 背包问题的贪心算法
- 背包问题(贪心算法)
- acm-背包问题(贪心算法)
- 背包问题(贪心算法)
- 贪心算法解决背包问题
- 分数背包问题(贪心算法)
- nyoj106背包问题【贪心算法】~
- 【数据结构】算法9.5-9.8 二叉排序树
- eclipse安装checkstyle、PMD、FindBugs、VisualVM
- eclipse从下载到使用
- hbase shell基础和常用命令详解
- C++ IO相关
- 贪心算法-背包问题2
- bnuoj52303 Floyd-Warshall(2016四川省赛)(生成树+倍增+SPFA)
- struts2配置文件
- iOS 图片拉伸小技巧
- 【数据结构】算法9.9-9.12 平衡二叉树
- Graph-Based Image Segmentation(2016.10.10)
- 四大组件之一:Service
- spring文件报错,报错内容 - cvc-complex-type.2.4.c
- 数组