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

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

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

2019-11-11 01:53:38
字體:
供稿:網(wǎng)友
問題描述  給定N個物品,每個物品有一個重量W和一個價值V.你有一個能裝M重量的背包.問怎么裝使得所裝價值最大.每個物品只有一個.輸入格式  輸入的第一行包含兩個整數(shù)n, m,分別表示物品的個數(shù)和背包能裝重量。  以后N行每行兩個數(shù)Wi和Vi,表示物品的重量和價值輸出格式  輸出1行,包含一個整數(shù),表示最大價值。樣例輸入3 52 33 54 7樣例輸出8數(shù)據(jù)規(guī)模和約定  1<=N<=200,M<=5000.01背包的思路,定義一個二位數(shù)組 dp[i][j] 表示 背包剩余重量為i且物品件數(shù)為j的最大價值,然而對于每個物品都有買跟不買兩種選擇,所有,子問題: 是買還是不買此物品所能得到的最大價值 更大呢?由此可以得出動態(tài)方程:
 當(dāng)i<0時           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];   //物體價值 int n;			//物體個數(shù)int m;			//背包的最大重量 int weight[MAX_W][MAX_N]; //weight[i][j] 表示背包為i重量產(chǎn)品數(shù)為j 的最高價值 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){			// 最后一個物品		if(bagWeight >= w[i])return v[i];	//買			else return 0;				//買不起	} 	else if(i!=0 && bagWeight >= w[i]){		//動態(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; }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黑龙江省| 揭西县| 漳州市| 井冈山市| 肥城市| 五寨县| 奇台县| 新兴县| 泸定县| 梁河县| 柞水县| 华蓥市| 松江区| 潼南县| 水富县| 灌阳县| 兴义市| 西平县| 云和县| 通榆县| 酒泉市| 孟州市| 昌黎县| 绥宁县| 尖扎县| 内丘县| 晋中市| 太湖县| 依安县| 太仆寺旗| 南康市| 临泉县| 临沂市| 读书| 高台县| 团风县| 若羌县| 陵川县| 远安县| 南开区| 灵台县|