亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 回溯法解01背包問題.cpp

?? 算法分析中
?? CPP
字號:
#include<iostream>
#include<algorithm>
using namespace std;
/*
0-1背包問題也是一個子集選取問題。
為了便于計算上界函數,可先將物品依其單位重量價值從大到小排序
此后只要按順序考察各物品即可。在實現時,由函數Bound來計算在當前結點處的上界
它是類Knap的私有成員。Knap的其它成員記錄解空間樹中的結點信息,以減少函數參數的
傳遞以及遞歸調用時所需的棧空間。
在解空間樹的當前擴展結點處,僅當要進入右子樹時才計算上界函數Bound,以判斷
是否可以將右子樹剪去。
在調用函數Knapsack之前,需要先將各物品依其單位重量價值從大到小排序。為此目的,
我們定義了類Object。其中,<=運算符與通常的定義相反,其目的是為了方便調用已有
的排序算法。在通常情況下,排序算法將待排序元素從小到大排列。

*/
template<class Typew,class Typep>
class Knap
{
	friend Typep Knapsack(Typep*,Typew*,Typew,int);
	private:
		Typep Bound(int i);
		void Backtrack(int i);
		Typew c;
		//背包的容量
		int n;
		//物品數
		Typew* w;
		//物品重量數組
		Typep* p;
		//物品價值數組
		Typew cw;
		//當前重量
		Typep cp;
		//當前價值
		Typep bestp;
		//當前最優價值
};

template<class Typew,class Typep>
Typep Knap<Typew,Typep>::Bound(int i)
{
	// 計算上界
	Typew eleft = c - cw;
	// 剩余容量
	Typep b = cp;
	// 以物品單位重量價值遞減序裝入物品

	while ( i <= n && w[i] <= eleft )
	{
		eleft -= w[i];
		b += p[i];
		i++;
	}
	//裝滿背包,也就是找到第一個裝不下的包

	if ( i <= n )
	{
		b += ( p[i]*1.0 / w[i] ) * eleft;
	}

	return b;
}

template< class Typew,class Typep >
void Knap< Typew,Typep >::Backtrack(int i)
{
	if ( i > n )
	{
		bestp = cp;
		return;
	}
	
	if ( cw + w[i] <= c )
		//x[i] = 1
	{
		cw += w[i];
		cp += p[i];
		Backtrack(i+1);
		cw -= w[i];
		cp -= p[i];
		//回到上層的時候當前層的變量,肯定要恢復的

	}

	if ( Bound(i+1) > bestp )
		//從i+1開始的所有符合條件的重量和,如果符合這個條件才去計算
	{
		Backtrack(i+1);
	}
}

class Object
{
	friend int Knapsack(int*,int*,int,int);
public:
	int operator<=(Object a) const
	{
		return ( d >= a.d );
	}
	int operator>(Object a) const
	{
		return (d<a.d);
	}
public:
	int ID;
	float d;
};

/*
我們上面提到先定位第一個數,然后整理這個數組,把比這個數小的放到它的左邊,大的放右邊,然后
返回這中間值的位置,下面這函數就是做這個的。
*/
//a[10],則 left = 0,right = 9;
int partition(Object n[],int left,int right)
{
	int lo,hi;
	Object pivot,t;
	pivot.d = n[left].d;
	pivot.ID = n[left].ID;
	cout<<pivot.d<<endl;
	cout<<pivot.ID<<endl;
	cout<<"start"<<endl;
	lo=left-1;
	hi=right+1;

	while(lo+1!=hi) 
	{
		cout<<"start compare"<<endl;
		cout<<"lo+1 = "<<lo+1<<endl;
		cout<<"hi = "<<hi<<endl;
		cout<<n[lo+1].d<<endl;
		cout<<n[lo+1].ID<<endl;
		cout<<n[hi-1].d<<endl;
		cout<<n[hi-1].ID<<endl;
		cout<<"end compare"<<endl;
		if(n[lo+1]<=pivot)
			lo++;
		//如果左邊的數據小于中樞點
		else if(n[hi-1]>pivot)
			hi--;
		else 
		{
			cout<<"交換數據"<<endl;
			t.d = n[lo+1].d;
			t.ID = n[lo+1].ID;
			n[lo+1].d = n[hi-1].d;
			n[lo+1].ID = n[hi-1].ID;
			n[hi-1].d = t.d;
			n[hi-1].ID = t.ID;
			++lo;
			--hi;
			
		}
	}

	n[left].d = n[lo].d;
	n[left].ID = n[lo].ID;
	n[lo].d = pivot.d;
	n[lo].ID = pivot.ID;
	//要注意與n[left]交換的n[low]是n[high]的前一個數據
	return lo;
}
void quicksort(Object n[], int left,int right)
{
	int dp;
	if (left<right) 
	{

   	 /*
    	這就是下面要講到的函數,按照上面所說的,就是把所有小于53的數放
    	到它的左邊,大的放在右邊,然后返回53在整理過的數組中的位置。
    	*/
    	dp=partition(n,left,right);

    	quicksort(n,left,dp-1);

    	quicksort(n,dp+1,right); //這兩個就是遞歸調用,分別整理53左邊的數組和右邊的數組
	}
}

template<class Typew,class Typep >
Typep Knapsack( Typep p[],Typew w[],Typew c,int n)
{
	//為Knap::Backtrack初始化
	Typew W = 0;
	Typep P = 0;
	Object* Q = new Object[n+1];

	Q[0].ID =0;
	Q[0].d = 0;
	for ( int i = 1; i <= n; ++i )
	{
		Q[i].ID = i;
		Q[i].d = 1.0 * p[i] / w[i];
		cout<<Q[i].ID<<endl;
		cout<<Q[i].d<<endl;
		cout<<"the data:"<<endl;
		P += p[i];
		W += w[i];
	}

	if ( W <= c )
	{
		return P;
		//裝入所有物品
	}
	//依物品單位重量價值排序
	//sort(Q,n);
	quicksort(Q,0,n);
	for ( i = 0; i <= n; ++i )
	{
		cout<<Q[i].ID<<endl;
		cout<<Q[i].d<<endl;
	}
	Knap< Typew,Typep > K;
	K.p = new Typep[n+1];
	K.w = new Typew[n+1];
	for ( i = 1; i <= n; ++i )
	{
		K.p[i] = p[Q[i-1].ID];
		K.w[i] = w[Q[i-1].ID];
		cout<<"asdf"<<endl;
		cout<<K.p[i]<<endl;
		cout<<K.w[i]<<endl;
	}

	K.cp = 0;
	K.cw = 0;
	K.c = c;
	K.n = n;
	K.bestp = 0;
	K.Backtrack(1);
	delete []Q;
	delete []K.w;
	delete []K.p;
	cout<<"the bestp is: "<<K.bestp<<endl;
	return K.bestp;

}
int main()
{
	int n = 4;
	int c = 7;
	float w[5]={0,3,5,2,1};
	float p[5]={0,9,10,7,4};
	Knapsack<float,float>(p,w,c,n);

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲福利社区一区| 一区二区三区在线免费观看| 亚洲欧美国产毛片在线| 蜜桃精品视频在线| 色综合网站在线| 亚洲视频资源在线| 麻豆中文一区二区| 欧美性生活一区| 亚洲国产精品激情在线观看| 免费成人av在线| 91成人免费电影| 国产精品高潮呻吟| 国产精品一区专区| 日韩欧美黄色影院| 婷婷开心激情综合| 91久久人澡人人添人人爽欧美| 精品成人a区在线观看| 天天av天天翘天天综合网| 国产欧美日韩中文久久| 日日嗨av一区二区三区四区| 色综合久久中文字幕综合网| 国产亚洲欧美激情| 极品瑜伽女神91| 欧美日韩一卡二卡三卡 | 国产日韩欧美激情| 免费视频一区二区| 欧美日韩午夜影院| 一区二区三区中文字幕在线观看| 国模一区二区三区白浆 | 成人精品一区二区三区四区| 欧美r级电影在线观看| 日本欧美一区二区三区乱码| 欧美精三区欧美精三区| 亚洲国产裸拍裸体视频在线观看乱了 | 国产亚洲精品福利| 国产一区二区不卡| 国产日韩欧美高清在线| 成人黄色小视频| 国产精品美女久久久久av爽李琼| 粉嫩欧美一区二区三区高清影视 | 日本成人在线视频网站| 欧美一区二区三区男人的天堂| 日韩精品乱码免费| 精品人在线二区三区| 国产自产高清不卡| 中文字幕av免费专区久久| 成人永久aaa| 中文字幕亚洲电影| 在线精品视频免费观看| 亚洲国产乱码最新视频 | 国产精品99久久久久久有的能看| 久久精子c满五个校花| 成人精品免费网站| 亚洲亚洲精品在线观看| 精品欧美乱码久久久久久| 久久97超碰色| 国产精品麻豆视频| 欧美日韩在线观看一区二区 | 久久成人精品无人区| 国产网站一区二区三区| 91视频www| 免费在线观看一区| 国产精品人人做人人爽人人添 | 欧美日韩另类一区| 国产麻豆一精品一av一免费| 亚洲欧美影音先锋| 91精品麻豆日日躁夜夜躁| 国产在线不卡视频| 亚洲综合男人的天堂| 日韩欧美国产系列| 91免费国产在线| 久久精品国产亚洲aⅴ| 国产精品亲子乱子伦xxxx裸| 欧美日韩在线一区二区| 国产盗摄视频一区二区三区| 亚洲尤物在线视频观看| 久久人人97超碰com| 欧美午夜片在线观看| 国产精品一区二区三区网站| 亚洲韩国精品一区| 国产欧美视频在线观看| 91精品国模一区二区三区| 99久久婷婷国产精品综合| 精品在线免费观看| 亚洲午夜久久久久久久久久久| 精品国产伦一区二区三区观看体验 | 一级日本不卡的影视| 久久视频一区二区| 欧美二区三区91| 91免费观看视频| 精品一区二区三区视频在线观看| 亚洲免费视频成人| 中文字幕乱码亚洲精品一区| 欧美一级搡bbbb搡bbbb| 在线免费亚洲电影| av电影在线观看不卡| 国模一区二区三区白浆| 蜜臀av一级做a爰片久久| 亚洲国产欧美另类丝袜| 中文字幕一区二区三| 国产日韩欧美a| wwwwxxxxx欧美| 日韩女优视频免费观看| 91麻豆精品国产91久久久久久久久 | 亚洲图片欧美综合| 亚洲乱码国产乱码精品精可以看| 亚洲影视在线观看| 亚洲欧美日韩中文字幕一区二区三区| 久久综合久久综合九色| 亚洲精品一区在线观看| 精品国产91亚洲一区二区三区婷婷| 欧美日韩在线三区| 欧美二区三区的天堂| 欧美伦理视频网站| 欧美福利电影网| 91精品国产一区二区三区香蕉| 欧美色爱综合网| 欧美精品一卡二卡| 欧美精选一区二区| 欧美一区二区美女| 日韩精品一区二区三区视频播放 | 精品日产卡一卡二卡麻豆| 日韩欧美亚洲国产另类| 日韩久久免费av| 久久伊人中文字幕| 中文字幕免费一区| 国产精品久久久久影院老司| 国产精品久久久爽爽爽麻豆色哟哟| 日本一区二区免费在线| 亚洲欧美怡红院| 亚洲一区二区四区蜜桃| 日韩经典一区二区| 国产久卡久卡久卡久卡视频精品| 国模套图日韩精品一区二区| 国产成人丝袜美腿| 色综合久久久久久久久| 欧美日韩中文国产| 2021中文字幕一区亚洲| 中文字幕一区二区三区在线观看| 一区二区三区四区国产精品| 丝袜美腿亚洲色图| 国产精品一区在线观看你懂的| 不卡av电影在线播放| 欧美日韩午夜在线| 久久久久久一级片| 中文字幕一区二区5566日韩| 一区二区免费在线播放| 毛片av一区二区| jlzzjlzz亚洲女人18| 欧美精品一卡两卡| 中文字幕欧美激情| 午夜精品久久久久久久| 国产精品一区二区在线播放| 在线中文字幕一区| 欧美成人aa大片| 亚洲欧美一区二区久久| 麻豆精品在线播放| 99久久伊人网影院| 欧美一区二区成人| 国产精品国产三级国产aⅴ中文 | 一级日本不卡的影视| 久久99精品国产麻豆婷婷洗澡| 99久久国产免费看| 久久综合久久综合亚洲| 一区二区三区精品| 丁香婷婷综合激情五月色| 这里只有精品视频在线观看| 国产精品国产三级国产a | 精品视频一区三区九区| 中文在线免费一区三区高中清不卡| 午夜欧美视频在线观看| 成人性视频网站| 精品国产免费人成电影在线观看四季| 亚洲欧美色综合| 大尺度一区二区| xf在线a精品一区二区视频网站| 亚洲午夜久久久久久久久电影院| 丁香六月综合激情| 精品伦理精品一区| 日韩不卡一二三区| 欧美日韩一区不卡| 亚洲男人的天堂在线观看| 福利一区在线观看| 久久久美女毛片| 六月丁香婷婷久久| 欧美一区二区美女| 亚洲成人1区2区| 在线观看免费一区| 自拍偷拍国产精品| 成人激情av网| 久久99精品国产麻豆婷婷洗澡| 欧美少妇性性性| 亚洲国产日日夜夜| 色婷婷久久久综合中文字幕| 亚洲国产精品精华液ab| 国产精品456露脸| 欧美激情一区二区三区四区| 国产美女精品人人做人人爽| 日韩小视频在线观看专区| 日日欢夜夜爽一区|