国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

湘潭大學(xué) 算法設(shè)計(jì)與分析實(shí)驗(yàn) 回溯 動(dòng)態(tài)規(guī)劃 貪心 模擬退火解決背包問(wèn)題

這篇具有很好參考價(jià)值的文章主要介紹了湘潭大學(xué) 算法設(shè)計(jì)與分析實(shí)驗(yàn) 回溯 動(dòng)態(tài)規(guī)劃 貪心 模擬退火解決背包問(wèn)題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

https://download.csdn.net/download/SQ_ZengYX/88620871

搜索與回溯

#include <iostream>
using namespace std;

#define N 100
int n;
double limitW;
double maxv;
int option[N];
int cop[N];

struct {
	double weight;
	double value;
} a[N];

void BackTrack(int i, double tw, double tv) {
	// 不能超出重量限制
	if (tw > limitW + 0.1)
		return;
	if (tv > maxv) {
		for (int k = 0; k < n; ++k)
			option[k] = cop[k];
		maxv = tv;
	}
	// 選第i個(gè)物品
	cop[i] = 1;
	if (i < n)
		BackTrack(i + 1, tw + a[i].weight, tv + a[i].value);
	// 不選第i個(gè)物品
	cop[i] = 0;
	if (i < n)
		BackTrack(i + 1, tw, tv);
}


int main() {
	int k;
	double w[N], v[N];
	cout << "輸入物品種數(shù):" << endl;
	cin >> n;

	cout << "輸入限制重量:" << endl;
	cin >> limitW;
	for (k = 0; k < n; ++k) {
		cout << "依次輸入第" << k + 1 << "個(gè)物品的重量和價(jià)值: " << endl;
		cin >> w[k] >> v[k];
		a[k].weight = w[k];
		a[k].value = v[k];
	}

	maxv = 0.0;
	for (k = 0; k < n; ++k)cop[k] = 0;
	BackTrack(0, 0.0, 0.0);
	cout << "所選物品為:" << endl;
	for (k = 0; k < n; ++k)
		if (option[k])
			cout << k + 1 << "\t";
	cout << endl << "總價(jià)值為:" << maxv << endl;
}

動(dòng)態(tài)規(guī)劃

#include<iostream>
using namespace std;
int weight[100], goods_value[100];//weight表示背包可容納重量,godds_value表示物品價(jià)值
int Value[100][100];//價(jià)值數(shù)組
int ZeroOneBag(int goods_value[], int weight[], int Value[][100], int m, int n) {
	for (int i = 1; i <= m; i++) {
		for (int j = 1; j <= n; j++) {
			if (j < weight[i]) {
				Value[i][j] = Value[i - 1][j];
			} else if (Value[i - 1][j] >= (Value[i - 1][j - weight[i]] + goods_value[i])) {
				Value[i][j] = Value[i - 1][j];
			} else {
				Value[i][j] = Value[i - 1][j - weight[i]] + goods_value[i];
			}
		}
	}
	return Value[m][n];
}
int main() {

	int i = 0, m, n, value = 0;
	cout << "請(qǐng)輸入物品個(gè)數(shù):" << endl;
	cin >> m;
	cout << "請(qǐng)輸入背包容量:\n";
	cin >> n;
	for (i = 1; i <= m; i++) {
		cout << "請(qǐng)輸入物品" << i << endl;
		cout << "重量: " << "價(jià)值: \n";
		cin >> weight[i] >> goods_value[i];

	}

	value = ZeroOneBag(goods_value, weight, Value, m, n);
	cout << "背包能容納的最大價(jià)值為:" << value << endl;
	cout << endl;
}

貪心

#include <iostream>
#include<algorithm>
using namespace std;
struct goodinfo {
	float p; //物品效益
	float w; //物品重量
	float X; //物品該放的數(shù)量
	int flag; //物品編號(hào)
	bool operator<(goodinfo b) {
		return p > b.p;
	}//按物品效益,重量比值做升序排列
};//物品信息結(jié)構(gòu)體
void bag(goodinfo goods[], float M, int n) {
	float cu;
	int i, j;
	for (i = 1; i <= n; i++)
		goods[i].X = 0;
	cu = M; //背包剩余容量
	for (i = 1; i < n; i++) {
		if (goods[i].w > cu) //當(dāng)該物品重量大與剩余容量跳出
			continue;
		goods[i].X = 1;
		cu = cu - goods[i].w; //確定背包新的剩余容量
	}
//按物品編號(hào)做降序排列
	for (j = 2; j <= n; j++) {
		goods[0] = goods[j];
		i = j - 1;
		while (goods[0].flag < goods[i].flag) {
			goods[i + 1] = goods[i];
			i--;
		}
		goods[i + 1] = goods[0];
	}
	cout << "最優(yōu)解為:" << endl;
	double ans = 0;
	for (i = 1; i <= n; i++) {
		cout << "第" << i << "件物品要放:";
		cout << goods[i].X << endl;
		ans += goods[i].p * goods[i].w * goods[i].X;
	}
	cout << "總價(jià)值為:" << ans << endl;

}
int main(void) {
	cout << "|--------運(yùn)用貪心法解背包問(wèn)題---------|" << endl;
	cout << "|-------------------------------------|" << endl;
	int i, n;
	float M;
	cout << "請(qǐng)輸入物品的總數(shù)量:";
	cin >> n;
	cout << "請(qǐng)輸入背包的最大容量:";
	cin >> M;
	goodinfo goods[n + 1];

	cout << endl;
	for (i = 1; i <= n; i++) {
		goods[i].flag = i;
		cout << "請(qǐng)輸入第" << i << "件物品的重量:";
		cin >> goods[i].w;
		cout << "請(qǐng)輸入第" << i << "件物品的效益:";
		cin >> goods[i].p;
		goods[i].p = goods[i].p / goods[i].w; //得出物品的效益,重量比
		cout << endl;
	}

	sort(goods + 1, goods + 1 + n);
	bag(goods, M, n);

	return 0;
}

模擬退火

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
void knapsackSa(int w[], int c[], int n, int M) { //n件物品,其重量和價(jià)值分別為w[i]和c[i],尋找將其裝入容量為M的背包中物品的最大價(jià)值
	int i, j, df, dm;
	int *x = new int[n]; //定義解空間
	for (i = 0; i < n; i++) { //初始化解為0
		x[i] = 0;
	}
	int f = 0, m = 0;
	for (i = 0; i < n; i++) {
		f = f + c[i] * x[i]; //初始化總價(jià)值
		m = m + w[i] * x[i];	 //初始化總重量
	}
	float t0 = 500; //控制參數(shù)t的初值
	float t = t0;
	float a = 0.95f; //衰減函數(shù)的系數(shù)
	float e = 0.00001f;
	int L = 100 * n; // Mapkob 鏈長(zhǎng)
	while (t > e) { //停止準(zhǔn)則
		srand((unsigned)time(NULL));//初始化隨機(jī)函數(shù)種子,srand((unsigned)time(NULL));是拿系統(tǒng)時(shí)間作為種子,由于時(shí)間是變化的,種子變化,可以產(chǎn)生不相同的隨機(jī)數(shù)。
		for (int k = 0; k < L; k++) {
			i = rand() % n; //隨機(jī)選取第i件物品
			if (x[i] == 0) {	//若i不在背包中
				if (m + w[i] <= M) {	//且加入總重量后不超過(guò)容量M,則直接放入背包中
					x[i] = 1;
					f = f + c[i];
					m = m + w[i];
				} else {
					j = rand() % n;	//隨機(jī)取出物品j
					while (x[j] == 0) {
						j = rand() % n;   //直到x[j]為1
					}
					df = c[i] - c[j];
					dm = w[i] - w[j];
					if (m + dm <= M)	//加入總重量后不超過(guò)容量M
						if (df > 0 || (exp(df / t) > (double)(rand() / (double)RAND_MAX))) { //價(jià)值差大于0或以exp(df/T)的接受概率接受新解
							x[i] = 1;
							x[j] = 0;
							f = f + df;
							m = m + dm;
						}
				}
			} else {
				j = rand() % n;
				while (x[j] == 1) {
					j = rand() % n;
				}
				df = c[j] - c[i];
				dm = w[j] - w[i];
				if (m + dm <= M)
					if (df > 0 || (exp(df / t) > (double)(rand() / (double)RAND_MAX))) { //價(jià)值差大于0或以exp(df/T)的接受概率接受新解
						x[i] = 0;
						x[j] = 1;
						f = f + df;
						m = m + dm;
					}
			}
		}
		t = t * a; //衰減函數(shù)
	}
	cout << "該0/1背包問(wèn)題的最優(yōu)解為: ";
	for (i = 0; i <= n - 1; i++) cout << x[i] << " ";
	cout << endl << "最大總價(jià)值為:" << f << endl;
}
int main() {
	int n, M;
	//n件物品,其重量和價(jià)值分別為w[i]和c[i],尋找將其裝入容量為M的背包中物品的最大價(jià)值
	cout << "請(qǐng)輸入物品件數(shù)n:" << endl;
	cin >> n;
	cout << "請(qǐng)輸入背包容量M:" << endl;
	cin >> M;
	int *w = new int[n];
	cout << "請(qǐng)依次輸入物品重量和價(jià)值:" << endl;
	int *c = new int[n];
	for (int i = 0; i < n; i++) {
		cin >> w[i] >> c[i];
	}

	knapsackSa(w, c, n, M);
	return 0;
}

測(cè)試用例文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-784892.html

8 8
2 5
3 8
2 6
4 9
5 10
4 7
3 8
5 14

到了這里,關(guān)于湘潭大學(xué) 算法設(shè)計(jì)與分析實(shí)驗(yàn) 回溯 動(dòng)態(tài)規(guī)劃 貪心 模擬退火解決背包問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 湘潭大學(xué) 湘大 XTU OJ 1271 Color 題解(非常詳細(xì))

    湘潭大學(xué) 湘大 XTU OJ 1271 Color 題解(非常詳細(xì))

    鏈接 1271 題面 Alice在玩一個(gè)游戲,她在一個(gè)m×n的格子里,隨機(jī)涂黑k個(gè)格子。然后她每次可以把一行或者一列的格子染成紅色,但是這一行中不能有黑色的格子。 請(qǐng)問(wèn)她最多能把多少個(gè)格子涂成紅色? 第一行是一個(gè)整數(shù)T(T≤100),表示樣例的個(gè)數(shù)。 每個(gè)樣例的第一行是m(1≤

    2024年02月11日
    瀏覽(20)
  • 南京郵電大學(xué)算法與設(shè)計(jì)實(shí)驗(yàn)四:回溯法(最全最新,與題目要求一致)

    南京郵電大學(xué)算法與設(shè)計(jì)實(shí)驗(yàn)四:回溯法(最全最新,與題目要求一致)

    要求用回溯法求解8-皇后問(wèn)題,使放置在8*8棋盤(pán)上的8個(gè)皇后彼此不受攻擊,即:任何兩個(gè)皇后都不在同一行、同一列或同一斜線上。請(qǐng)輸出8皇后問(wèn)題的所有可行解。 用回溯法編寫(xiě)一個(gè)遞歸程序解決如下裝載問(wèn)題:有n個(gè)集裝箱要裝上2艘載重分別為c1和c2的輪船,其中集裝箱i的

    2024年02月05日
    瀏覽(124)
  • 中北大學(xué)算法分析與設(shè)計(jì)實(shí)驗(yàn)報(bào)告六(最大團(tuán)問(wèn)題)

    1.實(shí)驗(yàn)名稱 實(shí)驗(yàn)六 回溯與分支限界算法實(shí)驗(yàn) 2.實(shí)驗(yàn)?zāi)康?題目:最大團(tuán)問(wèn)題 強(qiáng)化學(xué)生利用回溯算法和優(yōu)化處理實(shí)際問(wèn)題的能力。 3.訓(xùn)練知識(shí)點(diǎn)集群 (1)根據(jù)實(shí)驗(yàn)內(nèi)容設(shè)計(jì)算法偽代碼進(jìn)行算法描述; (2)利用C++/C/Java等編程語(yǔ)言對(duì)算法偽代碼進(jìn)行工程化實(shí)現(xiàn); (3)輸入測(cè)試用

    2024年02月06日
    瀏覽(33)
  • 中北大學(xué)算法分析與設(shè)計(jì)實(shí)驗(yàn)報(bào)告三(數(shù)字旋轉(zhuǎn)方陣)

    1.實(shí)驗(yàn)名稱 實(shí)驗(yàn)三 分治與減治算法實(shí)驗(yàn) 2.實(shí)驗(yàn)?zāi)康?(1)掌握分治法的設(shè)計(jì)思想; (2)掌握數(shù)字旋轉(zhuǎn)方陣的具體實(shí)現(xiàn)過(guò)程; (3)熟練掌握二維數(shù)組的使用方法; (4)在掌握的基礎(chǔ)上編程實(shí)現(xiàn)數(shù)字旋轉(zhuǎn)方陣的實(shí)現(xiàn)過(guò)程。 3.訓(xùn)練知識(shí)點(diǎn)集群 (1)根據(jù)實(shí)驗(yàn)內(nèi)容設(shè)計(jì)算法偽代碼

    2023年04月08日
    瀏覽(40)
  • 【算法分析與設(shè)計(jì)】第八章-回溯法

    約束條件 分為 顯式約束 和 隱式約束 顯式:規(guī)定了問(wèn)題的解的分量的取值范圍。如求n的全排列每個(gè)位置只能取1~n 隱式:用于判定候選解是否為可行解。如全排列的每個(gè)數(shù)字不允許重復(fù)。 問(wèn)題狀態(tài)和狀態(tài)空間樹(shù) ????????狀態(tài)空間樹(shù)是 描述問(wèn)題解空間 的樹(shù)形結(jié)構(gòu),每個(gè)結(jié)

    2024年02月08日
    瀏覽(27)
  • 【算法設(shè)計(jì)與分析】3.回溯法—地圖填色問(wèn)題

    【算法設(shè)計(jì)與分析】3.回溯法—地圖填色問(wèn)題

    回溯法地圖填色pre ppt 回溯法地圖填色報(bào)告word 回溯法地圖填色c++源代碼 目錄 相關(guān)資源下載 碎碎念 概覽 背景知識(shí) 問(wèn)題描述: 原理 回溯算法原理 回溯法涉及幾個(gè)概念 回溯法偽代碼 地圖填色(回溯法) 搜索順序策略(按優(yōu)先級(jí)排序) 剪枝策略 地圖數(shù)據(jù)獲取 回溯填色偽代碼

    2023年04月22日
    瀏覽(14)
  • 7-1 子集和問(wèn)題--回溯法(算法設(shè)計(jì)與分析)

    作者?陳曉梅? ? 單位?廣東外語(yǔ)外貿(mào)大學(xué) 設(shè)集合S={x1,x2,…,xn}是一個(gè)正整數(shù)集合,c是一個(gè)正整數(shù),子集和問(wèn)題判定是否存在S的一個(gè)子集S1,使S1中的元素之和為c。試設(shè)計(jì)一個(gè)解子集和問(wèn)題的回溯法,并輸出利用回溯法在搜索樹(shù)(按輸入順序建立)中找到的第一個(gè)解。 輸入格

    2024年02月04日
    瀏覽(16)
  • 【算法設(shè)計(jì)與分析】回溯法解決運(yùn)動(dòng)員配對(duì)問(wèn)題(課程設(shè)計(jì))

    【算法設(shè)計(jì)與分析】回溯法解決運(yùn)動(dòng)員配對(duì)問(wèn)題(課程設(shè)計(jì))

    針對(duì)運(yùn)動(dòng)員最佳配對(duì)問(wèn)題,本文利用回溯法尋求競(jìng)賽優(yōu)勢(shì)得分最優(yōu)解,研究男女運(yùn)動(dòng)員最佳配對(duì)法,使各組男女雙方競(jìng)賽優(yōu)勢(shì)的總和達(dá)到最大。針對(duì)這一問(wèn)題,本題采用的是男運(yùn)動(dòng)員選女運(yùn)動(dòng)員的方法,構(gòu)成了一棵排列樹(shù)。樹(shù)的結(jié)點(diǎn)表示女運(yùn)動(dòng)員,排列樹(shù)的層數(shù)表示男運(yùn)動(dòng)員

    2024年02月10日
    瀏覽(63)
  • 計(jì)算機(jī)算法分析與設(shè)計(jì)(22)---回溯法(最小重量機(jī)器設(shè)計(jì)問(wèn)題)

    計(jì)算機(jī)算法分析與設(shè)計(jì)(22)---回溯法(最小重量機(jī)器設(shè)計(jì)問(wèn)題)

    ?設(shè)某一機(jī)器由 n n n 個(gè)部件組成,每種部件都可以從 m m m 個(gè)不同的供應(yīng)商處購(gòu)得。設(shè) w i j w_{ij} w ij ? 是從供應(yīng)商 j j j 處購(gòu)得的部件i的重置, c i j c_{ij} c ij ? 是相應(yīng)的價(jià)格。設(shè)計(jì)一個(gè)算法,給出總價(jià)格不超過(guò) d d d 的最小重量機(jī)器設(shè)計(jì)。 數(shù)據(jù)輸入: 第 1 1 1 行有 3 3 3 個(gè)正整

    2024年02月06日
    瀏覽(26)
  • 算法分析與設(shè)計(jì)考前沖刺 (算法基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)與STL、遞歸和分治、 動(dòng)態(tài)規(guī)劃、貪心算法、 回溯算法)

    算法分析與設(shè)計(jì)考前沖刺 算法基礎(chǔ) 算法是一系列解決問(wèn)題的清晰指令,代表著用系統(tǒng)的方法描述解決問(wèn)題的策略機(jī)制。 程序是算法用某種程序設(shè)計(jì)語(yǔ)言的具體的 具體實(shí)現(xiàn) 算法特征: 有窮性(有限步) 確定性 輸入 輸出 可行性(有限時(shí)間) 算法的復(fù)雜性: 時(shí)間復(fù)雜性 和空間復(fù)

    2024年02月02日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包