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

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

51Nod 1086 背包問題 V2(二進制多重背包)

2019-11-11 05:10:44
字體:
供稿:網(wǎng)友

知識點:sum就表示從 1+2+4+8+.....+ 2^(m-2)。   我們可以檢驗, 在[1,Cn]中任意的數(shù) 我們都可以在這個序列中找到若干數(shù)相加得到。

1086 背包問題 V2基準時間限制:1 秒 空間限制:131072 KB 分值: 40 難度:4級算法題 收藏 關(guān)注有N種物品,每種物品的數(shù)量為C1,C2......Cn。從中任選若干件放在容量為W的背包里,每種物品的體積為W1,W2......Wn(Wi為整數(shù)),與之相對應(yīng)的價值為P1,P2......Pn(Pi為整數(shù))。求背包能夠容納的最大價值。Input
第1行,2個整數(shù),N和W中間用空格隔開。N為物品的種類,W為背包的容量。(1 <= N <= 100,1 <= W <= 50000)第2 - N + 1行,每行3個整數(shù),Wi,Pi和Ci分別是物品體積、價值和數(shù)量。(1 <= Wi, Pi <= 10000, 1 <= Ci <= 200)Output
輸出可以容納的最大價值。Input示例
3 62 2 53 3 81 4 1Output示例
9
#include<cstdio>#include<iostream>using namespace std;int main(){	int n,w,dp[50002]={0},wt,p,c;	scanf("%d%d",&n,&w);	while(n--){		scanf("%d%d%d",&wt,&p,&c);		for(int k=1;k<=c;c-=k,k<<=1){			for(int j=w;j>=wt*k;j--)			dp[j]=max(dp[j],dp[j-wt*k]+p*k);		}		if(c)		for(int j=w;j>=wt*c;j--)			dp[j]=max(dp[j],dp[j-wt*c]+p*c);	}	PRintf("%d/n",dp[w]);	return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 扎鲁特旗| 乌兰县| 南平市| 平远县| 南木林县| 台山市| 大姚县| 普陀区| 衡阳县| 华池县| 韩城市| 蓬莱市| 正阳县| 乐陵市| 盱眙县| 交城县| 永嘉县| 福贡县| 禹州市| 大兴区| 石棉县| 无锡市| 锦屏县| 北辰区| 富锦市| 怀集县| 新宾| 青州市| 清流县| 盱眙县| 昌黎县| 文化| 湄潭县| 昂仁县| 县级市| 谢通门县| 漾濞| 盘山县| 漳州市| 寿光市| 分宜县|