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

首頁 > 學院 > 開發設計 > 正文

藍橋杯 01背包 動態規劃

2019-11-11 03:05:15
字體:
來源:轉載
供稿:網友
問題描述  給定N個物品,每個物品有一個重量W和一個價值V.你有一個能裝M重量的背包.問怎么裝使得所裝價值最大.每個物品只有一個.輸入格式  輸入的第一行包含兩個整數n, m,分別表示物品的個數和背包能裝重量。  以后N行每行兩個數Wi和Vi,表示物品的重量和價值輸出格式  輸出1行,包含一個整數,表示最大價值。樣例輸入3 52 33 54 7樣例輸出8數據規模和約定  1<=N<=200,M<=5000.01背包的思路,定義一個二位數組 dp[i][j] 表示 背包剩余重量為i且物品件數為j的最大價值,然而對于每個物品都有買跟不買兩種選擇,所有,子問題: 是買還是不買此物品所能得到的最大價值 更大呢?由此可以得出動態方程:
 當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] 數組 便是  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;			//物體個數int m;			//背包的最大重量 int weight[MAX_W][MAX_N]; //weight[i][j] 表示背包為i重量產品數為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]){		//動態規劃		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; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 樟树市| 金秀| 连南| 南平市| 沾化县| 巴彦淖尔市| 丰台区| 镇安县| 达日县| 龙山县| 闽侯县| 海伦市| 稻城县| 故城县| 玉环县| 临清市| 巴塘县| 闽清县| 体育| 湟中县| 清涧县| 东光县| 曲麻莱县| 随州市| 天镇县| 安仁县| 彰武县| 汽车| 北票市| 韩城市| 常熟市| 建湖县| 应城市| 永胜县| 介休市| 仁寿县| 阿荣旗| 屏山县| 宜君县| 兴安盟| 石狮市|