首页 > 其他分享 >51nod-1086 背包问题(多重背包)

51nod-1086 背包问题(多重背包)

时间:2023-06-12 18:07:08浏览次数:55  
标签:1086 背包 51nod int p1 w1 include dp


原题链接



1086 背包问题 V2



基准时间限制:1 秒 空间限制:131072 KB 分值: 40  难度:4级算法题



 收藏

 关注


Input


第1行,2个整数,N和W中间用空格隔开。N为物品的种类,W为背包的容量。(1 <= N <= 100,1 <= W <= 50000)第2 - N + 1行,每行3个整数,Wi,Pi和Ci分别是物品体积、价值和数量。(1 <= Wi, Pi <= 10000, 1 <= Ci <= 200)


Output


输出可以容纳的最大价值。


Input示例


3 62 2 53 3 81 4 1


Output示例


9



多重背包问题,用二进制拆分

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>

using namespace std;

int w[105], p[105], c[105];
int dp[50005];
int main(){
	
//	freopen("in.txt", "r", stdin);
	int N, W;
	
	scanf("%d%d", &N, &W);
	for(int i = 0; i < N; i++){
		scanf("%d%d%d", w+i, p+i, c+i);
	}
	int w1, p1;
	for(int i = 0; i < N; i++){
		int j;
		for(j = 1; j <= c[i]; j <<= 1){
			 w1 = j * w[i], p1 = j * p[i];
			for(int h = W; h >= w1; h--){
				dp[h] = max(dp[h], dp[h - w1] + p1);
			}
			c[i] -= j;
		}
		j = c[i];
		w1 = j * w[i], p1 = j * p[i];
		for(int h = W; h >= w1; h--){
			dp[h] = max(dp[h], dp[h - w1] + p1);
		}
	}
	printf("%d\n", dp[W]);
	
	return 0;
}




标签:1086,背包,51nod,int,p1,w1,include,dp
From: https://blog.51cto.com/u_16158872/6464546

相关文章

  • 51nod-1280 前缀后缀集合
    原题链接1280 前缀后缀集合题目来源: Codility基准时间限制:1 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注一个数组包含N个正整数,其中有些是重复的。一个前缀后缀集是满足这样条件的下标对(P,S),0<=P,S......
  • 51nod-1523 非回文
    原题链接1523 非回文题目来源: CodeForces基准时间限制:1 秒空间限制:131072 KB分值: 40 难度:4级算法题一个字符串是非回文的,当且仅当,他只由前p个小写字母构成,而且他不包含长度大于等于2的回文子串。给出长度为n的非回文串s。请找出字典序......
  • 51nod-1460 连接小岛
    原题链接1460 连接小岛题目来源: CodeForces基准时间限制:1.5 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注li+1  对于所有的 1≤i≤n-1。现在要将相邻的小岛用桥连接起来。现在有一条桥的长度是a,第i个......
  • 51nod-1434 区间LCM
    原题链接1434 区间LCM题目来源: TopCoder基准时间限制:1 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注例如,LCM(2)=2,LCM(4,6)=12,LCM(1,2,3,4,5)=60。现在给定一个整数N(1<=N<=1000000),需要找到......
  • 51nod-1624 取余最长路
    原题链接1624 取余最长路基准时间限制:1 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注佳佳有一个n*m的带权矩阵,她想从(1,1)出发走到(n,m)且只能往右往下移动,她能得到的娱乐值为所经过的位置的权的总和。有一天,她被下了恶......
  • 51nod-1191 消灭兔子
    原题链接1191 消灭兔子题目来源: 2013腾讯马拉松赛第三场基准时间限制:1 秒空间限制:131072 KB分值: 40 难度:4级算法题 收藏 关注有N只兔子,每只有一个血量B[i],需要用箭杀死免子。有M种不同类型的箭可以选择,每种箭......
  • 51nod-1158 全是1的最大子矩阵(单调栈)
    原题链接1158 全是1的最大子矩阵基准时间限制:1 秒空间限制:131072 KB分值: 80 难度:5级算法题 收藏 关注Input第1行:2个数m,n中间用空格分隔(2 <= m,n <= 500)第2 - N + 1行:每行m个数,中间用空格分隔,均为0或1。......
  • hdu2079选课时间(背包)
    思路:相当于一个裸的多重背包#include<iostream>#include<cstdio>usingnamespacestd;inta[20],num[20],dp[50];intmain(){ intT; scanf("%d",&T); while(T--) { intn,m; scanf("%d%d",&n,&m); for(inti=1;i<=m;i......
  • 0-1背背包问题
    0-1背包问题参考链接:https://en.wikipedia.org/wiki/Knapsack_problem/***0-1背包问题*将n个价值为v,重量为v的物品放入限重为W的背包中,要求背包中物品的价值最高。**/importjava.util.HashSet;importjava.util.Set;publicclassKnapsack{//物品的价......
  • 算法题总结-分组背包
    原题有N件物品和一个容量为V的背包。第i件物品的费用是Ci,价值是Wi。这些物品被划分为K组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。由于截止目前,没有刷到对应的经典题目,以下以依赖背包的转化题......