国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

藍(lán)橋杯 01背包 動(dòng)態(tài)規(guī)劃

2019-11-11 01:15:01
字體:
供稿:網(wǎng)友
問題描述  給定N個(gè)物品,每個(gè)物品有一個(gè)重量W和一個(gè)價(jià)值V.你有一個(gè)能裝M重量的背包.問怎么裝使得所裝價(jià)值最大.每個(gè)物品只有一個(gè).輸入格式  輸入的第一行包含兩個(gè)整數(shù)n, m,分別表示物品的個(gè)數(shù)和背包能裝重量?! ∫院驨行每行兩個(gè)數(shù)Wi和Vi,表示物品的重量和價(jià)值輸出格式  輸出1行,包含一個(gè)整數(shù),表示最大價(jià)值。樣例輸入3 52 33 54 7樣例輸出8數(shù)據(jù)規(guī)模和約定  1<=N<=200,M<=5000.01背包的思路,定義一個(gè)二位數(shù)組 dp[i][j] 表示 背包剩余重量為i且物品件數(shù)為j的最大價(jià)值,然而對于每個(gè)物品都有買跟不買兩種選擇,所有,子問題: 是買還是不買此物品所能得到的最大價(jià)值 更大呢?由此可以得出動(dòng)態(tài)方程:
 當(dāng)i<0時(shí)           maxValue =0 
 其他情況	   maxValue = max(getMax(bagWeight-w[i],i-1)+v[i] ,getMax(bagWeight,i-1));	AC代碼如下,
int weight[MAX_W][MAX_N] 數(shù)組 便是  dp[i][j]
#include<iostream>#include<cstdlib>#include<malloc.h>#include<algorithm>#include <memory.h>using namespace std;#define MAX_N 201#define MAX_W 5001  int w[MAX_N];	//物體重量 int v[MAX_N];   //物體價(jià)值 int n;			//物體個(gè)數(shù)int m;			//背包的最大重量 int weight[MAX_W][MAX_N]; //weight[i][j] 表示背包為i重量產(chǎn)品數(shù)為j 的最高價(jià)值 int getMax(int bagWeight,int i){	int value;	if(i < 0) return 0;			//沒有物品	if(weight[bagWeight][i] != -1){		value=weight[bagWeight][i];	//“備忘錄”,此前保存的最大值	} else if(i==0){			// 最后一個(gè)物品		if(bagWeight >= w[i])return v[i];	//買			else return 0;				//買不起	} 	else if(i!=0 && bagWeight >= w[i]){		//動(dòng)態(tài)規(guī)劃		value = max(getMax(bagWeight-w[i],i-1)+v[i] ,getMax(bagWeight,i-1));	} else {					//同樣買不起		value = getMax(bagWeight,i-1);			}	weight[bagWeight][i] = value;			//保存最大值	return value;					//返回最大值} int main(){//	freopen("2.txt","r",stdin);	memset(weight,-1,sizeof(weight));//	cout<< sizeof(weight);	int maxValue=0;	cin>>n>>m;	for(int i=0;i<n;i++)		cin>>w[i]>>v[i];	maxValue=getMax(m,n-1);		cout<<maxValue;	return 0; }
上一篇:順序串基本操作

下一篇:JDBC小例子

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 游戏| 大姚县| 油尖旺区| 陈巴尔虎旗| 明溪县| 三门峡市| 大竹县| 朔州市| 万州区| 台南市| 侯马市| 五莲县| 马尔康县| 会东县| 城口县| 龙口市| 泌阳县| 阜新市| 文安县| 杂多县| 九寨沟县| 平谷区| 合水县| 自治县| 偃师市| 昆山市| 靖边县| 青州市| 霍林郭勒市| 永吉县| 柳河县| 于都县| 红安县| 中江县| 东方市| 白河县| 普洱| 长丰县| 区。| 长岭县| 泰宁县|