1. 程式人生 > >貪心演算法實現揹包問題(揹包可拆分)

貪心演算法實現揹包問題(揹包可拆分)

#include <iostream>
#include <algorithm>
using namespace std;
struct Goods{
  int weight;
  int value;
  double per;//單位重量的價值
  double load;//裝多少權重
};
//定義sort函式比較器
int compare(Goods const&a,Goods const&b){
    if(a.per>b.per)
        return 1;
    else
        return 0;
}
//貪心演算法
void Greedy(Goods g[],int good_number,int content){
  for(int i=0;i<good_number;i++){
    if(g[i].weight<content){
        content-=g[i].weight;
        g[i].load=1;
    }else if(content>0){

       g[i].load=(double)content/g[i].weight;
       cout<<g[i].load;
       content=0;
    }
  }
}

int main()
{  int n;
   int bag;
   double total_weight=0;
   double total_value=0;
   cout<<"請輸入貨物種類";
   cin>>n;
   cout<<"請輸入揹包大小"<<endl;
   cin>>bag;
   Goods gs[n+1];
   cout<<"請依次輸入每種貨物的重量和價值"<<endl;
   for(int i=0;i<n;i++){
    cin>>gs[i].weight;
    cin>>gs[i].value;
    gs[i].per=double(gs[i].value/gs[i].weight);
    gs[i].load=0;
   }
   sort(gs,gs+n,compare);
   Greedy(gs,n,bag);
   for(int i=0;i<n;i++){
    if(gs[i].load>=0){
        total_weight+=gs[i].load*gs[i].weight;
        total_value+=gs[i].load*gs[i].value;
    }else{
    break;
    }
   }
   cout<<"總容量為:"<<total_weight<<endl<<"總價值為:"<<total_value<<endl;
   return 0;
}

相關推薦

貪心演算法實現揹包問題揹包拆分

#include <iostream> #include <algorithm> using namespace std; struct Goods{ int weight

JAVA貪心演算法實現揹包問題

以下貪心演算法相關概念及題目轉載自http://blog.csdn.net/effective_coder/article/details/8736718,java實現程式碼為博主原創 貪心演算法思想: 顧名思義,貪心演算法總是作出在當前看來最好的選擇。也就是說貪心演

貪心演算法:0-1揹包

“0-1 揹包問題 問題描述 有一容積有限的揹包(容積為V) 現在有n個物品,每個物品都有自己的價值和提及 如何知道一個較優的策略,使得能夠放進揹包裡價值之和最大的的物品  解題的思路 先把各個物品的價值密度求出來

多重揹包O(N*V)演算法詳解使用單調佇列

多重揹包問題: 有N種物品和容量為V的揹包,若第i種物品,容量為v[i],價值為w[i],共有n[i]件。怎樣裝才能使揹包內的物品總價值最大? 網上關於“多重揹包”的資料倒是不少,但是關於怎麼實現O(N*V)演算法的資料,真得好少呀,關於“單調佇列”那部分演算法,又沒說明

貪心演算法解決0-1揹包問題

揹包問題描述如下:  已知   揹包容量M=120   物品種類數n=10   各種物品的總效益pi(i=1,2,………10) : 50,60,70,80,90,80,70,60,50,40   各種物品的總重量wi(i=1,2………10) : 17,30,25,41,80,

社交網路影響力最大化——貪心演算法實現Python實現

#!/usr/bin/env python # coding=UTF-8 from nose.tools import * from networkx import * from linear_threshold_clime import * from linear_threshold import * i

各種基本演算法實現小結—— 排序演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

推薦系統中協同過濾演算法實現分析重要兩個圖!!

“協”,指許多人協力合作。 “協同”,就是指協調兩個或者兩個以上的不同資源或者個體,協同一致地完成某一目標的過程。 “協同過濾”,簡單來說,就是利用興趣相投或擁有共同經驗的群體的喜好來給使用者推薦感興趣的資訊,記錄下來個人對於資訊相當程度的迴應(如評分),以達到過濾的目的,進而幫助別人篩

OpenCV下車牌定位演算法實現程式碼

             分類:            影象處理

0-1揹包 反向、概率HDOJ 2955

Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 31576    Accepted Submission(s

C/C++:各種基本演算法實現小結—— 圖及其遍歷

各種基本演算法實現小結(四)—— 圖及其遍歷 (均已測試通過) ==================================================================== 圖——深度優先和廣度優先演算法 無向圖

Capacitated Facility Location Problem貪心演算法實現

1. 問題描述 給定n個工廠和m個顧客,開工廠需要一定的費用,一個工廠有一定的容量限制,每個顧客也有一定的需求,而每個顧客要選取某個工廠也需要一定的分配費用,現在要求找出一個分配方案,把顧客分配給不同的工廠,然後在可以滿足所有顧客需求的前提下讓所有的花費(開工廠的花費和分配的花費)最小。 問

Qt 之自定義介面實現無邊框、移動

簡述 UI設計是指對軟體的人機互動、操作邏輯、介面美觀的整體設計。好的UI設計不僅是讓軟體變得有個性、有品位,還要讓軟體的操作變得舒適簡單、自由,充分體現軟體的定位和特點。 愛美之心人皆有之。其實軟體介面就像工業造型一樣,是產品的重要賣點。一個產品擁有美觀的

C/C++:各種基本演算法實現小結—— 單鏈表

各種基本演算法實現小結(一)—— 單鏈表 (均已測試通過) ============================================================ 單鏈表(測試通過) 測試環境: Win-TC

C/C++:各種基本演算法實現小結—— 查詢演算法

各種基本演算法實現小結(六)—— 查詢演算法 (均已測試通過) =================================================================== 1、簡單查詢 在一組無序數列中,查詢特定某個數值,並返回其位置

C/C++:各種基本演算法實現小結—— 常用演算法

各種基本演算法實現小結(七)—— 常用演算法 (均已測試通過) ====================================================================== 1、判斷素數 測試環境:VC 6.0

【高精度演算法】A-B答案

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> cha

C/C++:各種基本演算法實現小結—— 堆 棧

各種基本演算法實現小結(二)—— 堆 棧 (均已測試通過) ============================================================== 棧——陣列實現 測試環境:Win - TC

01簡單揹包兩種方法

題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說:“你的房間需要購買哪些物品,怎麼佈置,你說了算,只要不超過NN元錢就行”。今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的NN元。於是,他把每件物品規

【Qt】Qt之自定義介面實現無邊框、移動【轉】

簡述 UI設計是指對軟體的人機互動、操作邏輯、介面美觀的整體設計。好的UI設計不僅是讓軟體變得有個性、有品位,還要讓軟體的操作變得舒適簡單、自由,充分體現軟體的定位和特點。 愛美之心人皆有之。其實軟體介面就像工業造型一樣,是產品的重要賣點。一個產品擁有美觀的介面會給人帶來舒適的視覺享受,拉近人與產品的