1. 程式人生 > >貪心演算法求解揹包問題

貪心演算法求解揹包問題

問題:給定n個物品和一個容量為C的揹包,物品i的重量為w 其價值為v。揹包問題就是如何如何選擇揹包的物品,使裝入揹包中的物品的總價值是最大的,注意和0/1揹包問題的區別,在揹包問題中可以將某種物品的一部分裝入揹包,不可以重複裝入。但是在0/1揹包問題中,只有裝入或者不裝入兩種結果。

#include<iostream>
using namespace std;
int KanpSack(int w[],int v[],int C) {
	double x[10] = {0};
	int maxValue = 0;
	int i = 0;
	do {
		x[i] = 1;
		maxValue+=v[i];
		C = C-w[i];
		i++;
	} while(w[i]<C);
//	for(int i =0 ; w[i]<C;i++){
//		x[i] = 1;
//		maxValue+=v[i];
//		C =C-w[i];
//	}
	x[i] = (double)C/w[i];
	maxValue+=x[i]*w[i];
	return maxValue;
}
int main() {
	int arrayw[10]= {9,8,7,6,5,4,3,2,1,0};
	int arrayv[10]= {9,8,7,6,5,4,3,2,1,0};
	int cw = 60;
	int rel =  KanpSack(arrayw,arrayv,cw);
	cout<<"這個揹包的價值是:"<<rel<<endl;
	return 0;
}
這個程式碼簡單的實現了揹包問題的結果可以儘可能多的增加了揹包的價值,從某種意義上講,從最簡單的方面實現了揹包問題。首先滿足價值和重量的遞減排序,其次我們看到揹包容量的大小就是60。其實所有的方法都可以在這個程式碼的基礎之上加以修改,舉個例子,當用戶自己輸入一組資料的時候由於是亂序的所以,我們可以利用一個簡單的排序演算法實現對使用者輸入的排序

相關推薦

貪心演算法求解揹包問題

問題:給定n個物品和一個容量為C的揹包,物品i的重量為w 其價值為v。揹包問題就是如何如何選擇揹包的物品,使裝入揹包中的物品的總價值是最大的,注意和0/1揹包問題的區別,在揹包問題中可以將某種物品的一部分裝入揹包,不可以重複裝入。但是在0/1揹包問題中,只有裝入或者不裝入兩

演算法設計的揹包問題-------------用貪心演算法求解

•public static float knapsack(float c,float [] w, float [] v,float [] x) •   { •      int n=v.leng

NYOJ 貪心演算法 106 揹包問題

揹包問題 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3 描述 現在有很多物品(它們是可以分割的),我們知道它們每個物品的單位重量的價值v和重量w(1<=v,w<=10);如果給你一個揹包它能容納的重量為m

【資料結構與演算法貪心演算法解決揹包問題。java程式碼實現

揹包問題(貪心演算法) 貪心演算法思想 簡單的說,就是將大問題轉化為最優子問題,例如本題所要求的,揹包容量有限,要想使物品的總價值最高,那麼,我們必須儘可能的選擇權重高的(即單位價值更高)的物品進行裝載。 在揹包問題中,物品是可拆的,即可以分成任意部分進行裝載,而最終實現的目標是

貪心求解揹包問題

問題描述:7個物品,重為{2,3,5,7,1,4,1},價值為{10,5,15,7,6,18,3},揹包容量W=15,求最優解。 思路:將物品按單重價值降序排列,裝滿為止。 C++程式碼: #include<iostream> #include<iomanip>

貪心演算法揹包問題 C++

題目 有一個揹包,揹包容量是M=150。有7個物品,物品可以分割成任意大小。 要求儘可能讓裝入揹包中的物品總價值最大,但不能超過總容量。 物品 A B C D E

演算法】----貪心演算法揹包問題)

    【前言:】     上一篇部落格從概念上說了一下貪心演算法,這次我們通過一個例項,來進一步幫助大家理解貪心演算法。     一、【經典例項:】(揹包問題)     給定n個物品和一個容量為C的揹包,物品i的重量是Wi,其價值為Vi,揹包問題是如何選擇入揹包的物品

動態規劃和貪心演算法揹包問題理解

一.揹包問題 引用書上關於0-1揹包和部分揹包的闡述: 二.貪心與動態規劃區別 關於紅色矩形部分解釋為什麼0-1不能使用貪心演算法,是因為當你選擇一個物品時,整個物品的大小都需要計算,然而揹包的的大小又是固定的,那麼剩下的揹包大小與剩下的物品之間

每日一道貪心演算法揹包+小船過河問題)

貪心演算法(百度百科) 貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。 貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的

用c++程式碼實現貪心演算法求解最短路徑問題

貪心演算法求解最短路徑問題: 假設演算法要處理下圖,需要把圖資料組織存放到相應的資料結構中。  這個是標頭檔案stdafx.h中的內容#pragma once #include <stdio.h> #include &

貪心演算法揹包問題時對單位重量物品價值排序Java實現

package n18_揹包問題貪心演算法; /* * 用貪心演算法解揹包問題 */ public class Main { public static void main(String[] args) { // 單位重量價值分別為

利用貪心演算法求解tsp問題

一、TSP問題 TSP問題(Travelling Salesman Problem)即旅行商問題,又譯為旅行推銷員問題、貨郎擔問題。假設有一個旅行商人要拜訪n個城市,他必須選擇所要走的路徑,路徑的限制是每個城市只能拜訪一次,而且最後要回到原來出發的城市。路徑的選擇目標是要求

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

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

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

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

演算法導論】貪心演算法揹包問題

        在討論貪心演算法時,我們先了解貪心演算法與動態規劃之間的區別與聯絡,後面我們將發現可以用0、1揹包問題和部分揹包問題來比較貪心演算法和動態規劃的關係。         我們知道,對於一個最優解問題,貪心演算法不一定能夠產生一個最優解。因為,如果想要採用貪心演

Java描述貪心演算法解決揹包問題

思路: 首先將物品根據價效比排好序在一個集合裡,價效比=價格/重量... 然後根據價效比從大到小依次依次放入揹包,如果沒辦法放入這個物品的全部,就放入一部分,如果可以放入全量物品,就放入全量物品。 Main.java的程式碼 import java.util.ArrayL

基於貪心演算法求解TSP問題(JAVA)

前段時間在搞貪心演算法,為了舉例,故拿TSP來開刀,寫了段求解演算法程式碼以便有需之人,注意程式碼考慮可讀性從最容易理解角度寫,沒有優化,有需要可以自行優化!一、TSP問題TSP問題(Travelling Salesman Problem)即旅行商問題,又譯為旅行推銷員問題、

劍指offer(面試題14): 動態規劃和貪心演算法求解最優化問題

題目 給定一長為n的繩子,要求把繩子剪成m段(m,n都是整數且n>1,m>1),每段繩子的長度記為k[0], k[1], k[2]…,k[m]。請問k[0]*k[1]*k[2]….*k[m]可能的最大乘積是多少?例如,當繩子的長度是8時,可以剪成2

分數揹包問題(貪心演算法)O(n)時間求解

演算法核心:線性時間選擇演算法+貪心 問題介紹:有一個揹包,總限重為c, 還有一系列物品,他們有各自的重量(記為)和各自的利潤,每個物品可以只被拿走一部分。設計一個在O(n)時間內的貪心演算法使得裝入揹包的物品利潤最大化,並且總物品重量不超過。 演算法數學化表示:

貪心演算法之最大的子組合求解

      本來博主是沒有心情寫這篇部落格了,因為昨天住的地方遭賊了。半夜兩點多,偷開我家窗戶,把博主臥室裡面的玫瑰金給偷走了。當時博主就睡得特別不舒服,半夜醒來就發現手機被偷了。搞得博主後半夜基本沒有睡,萬幸的是,博主的手機開了“查詢iphone”功能,因此開啟了丟失