zoukankan      html  css  js  c++  java
  • 贪心——部分背包

    贪心算法——部分背包问题

    贪心策略的一般步骤:

    • 提出贪心策略:观察问题特征,构造贪心选择
    • 证明策略正确:假设最优方案,通过替换证明(交换论证法或者数学归纳法)

    一、部分背包的形式化定义

    贪心策略:最高性价比优先

    先按单位质量的价值从大到小排序,然后尽可能装入单位价值大的物品。

    贪心策略正确性证明:

    二、伪代码:

    三、代码实现:洛谷P2240

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #define MAXN (100+10)
    using namespace std;
    struct Node {
    	int m; // 总重量 
    	int v; // 总价值
    	double cost_per; //性价比 
    }; 
    int N,T;
    Node node[MAXN];
    double tot_value = 0.0;
    
    bool cmp(Node a, Node b)
    {
    	return (a.cost_per - b.cost_per) > 1e-8; //按性价比从大到小排序 
    }
    
    int main()
    {
    	cin >> N >> T;
    	for (int i = 0; i < N; ++i) {
    		cin >> node[i].m >> node[i].v ;
    		
    		node[i].cost_per = (double)node[i].v  / (double)node[i].m;
    	}
    	sort(node, node+N, cmp);
    	for (int i = 0; i < N; ++i) {
    		if (node[i].m < T) {
    			tot_value += (double)node[i].v;
    			T -= node[i].m;
    		}
    		else {
    			tot_value += node[i].cost_per * T;
    			T = 0;
    			break;
    		}
    	}
    	printf("%.2lf", tot_value);
    	return 0; 
    }
    
  • 相关阅读:
    常用业务接口界面化 in python flask
    git命令中带有特殊符号如@
    生成唯一标识 字符串跟时间戳的结合
    MD5 in JAVA
    修改(同步)linux时间
    jenkins 从git拉取代码
    Git 默认不区分大小写
    postman也可以使用F12功能
    Session
    WebXML部署服务
  • 原文地址:https://www.cnblogs.com/VanHa0101/p/13986236.html
Copyright © 2011-2022 走看看