特大背包问题

news/2024/10/18 7:49:46/

题目:

特大背包问题 (20分)
C时间限制:1000 毫秒 | C内存限制:10000 Kb
题目内容:
现在有一个容量为C的背包和N个重量和价值已知的物品. 现在要从这n个物品中挑选出一些物品, 使得选择的物品的总重量不超过背包的容量, 且总价值最大.
此题的数据范围:
1 <= C <= 10^8(10的8次方)
1 <= N <= 100
输入描述
有多组测试数据. 第一行一个正整数T(T<=15), 表示测试数据组数.
对于每组测试数据:
第一行两个正整数N和C, 分别表示物品的数量和背包的容量.
接下来N行, 每行两个正整数w,v ,分别表示对应物品的重量和价值(1<= w <= 10^7, 1<= v <= 100)

输出描述
输出一个正整数, 表示在所选物品不超过背包容量的情况下, 能够得到的最大价值.

输入样例
1
3 10
5 10
5 10
4 12

输出样例
22
————————————————

思路:

先求出所有物品的总价值V, 用一个一维数组,下标对应价值,数组储存总价值依次减小时需要的最小容量,。

最后输出 题目所给背包容量对应的价值即为所求答案。

核心代码:

for(i=1;i<=n;i++)for(int j = V ;j >= v[i];j--)dp[j]= min( dp[j] , dp[j-v[i]] + w [i]);
#include <iostream>
#include<cstring> 
using namespace std;
long long int  w[10000],v[10000],dp[10000];
int main()
{int t;cin>>t;while(t--){long long int i,j,n,c,V=0;cin>>n>>c;for(i=1;i<=n;i++) {cin>>w[i];cin>>v[i];V+=v[i];}memset(dp,1000000010,sizeof(dp)); ///要求最小容量,初始化为最大值;dp[0]=0;for(i=1;i<=n;i++)for(int j = V ;j >= v[i];j--)dp[j]= min( dp[j] , dp[j-v[i]] + w [i]);for( i=V ;i>=0 ; i--)if(dp[i]<=c){cout<<i<<endl; ///此处输出i,即为满足条件的最大价值break;}}return 0;    
}

参考文献:

https://www.cnblogs.com/kkbill/p/12081172.html

http://www.mamicode.com/info-detail-2974086.html

https://www.cnblogs.com/young-children/p/11742279.html

https://blog.csdn.net/De_lovely_crane/article/details/100829699

https://blog.csdn.net/nameofcsdn/article/details/106630159

https://blog.csdn.net/nameofcsdn/article/details/107235360


http://www.ppmy.cn/news/798579.html

相关文章

地下迷宫

import java.util.*;/*** 题目大意:n*m格迷宫,1代表青蛙可以通过,0不能通过* 青蛙体力值P,每次走一步,横向走消耗体力值1,向下走不消耗体力,* 向上走消耗体力值3.* 青蛙初始位置(0,0),迷宫出口(0,m-1)* 求青蛙走出迷宫的路径*/ public class Main {static class Node {int x;in…

矿洞探险小游戏(原创)

简介 这是一款迷宫探险类小游戏&#xff0c;玩家将在一个陌生的矿洞里挖掘未知&#xff0c;捡金币和经验&#xff0c;遇到可怕的怪兽&#xff0c;或者只是空地。在过了一定时间后&#xff0c;矿洞将从白天进到黑夜&#xff08;虽然它不露天&#xff09;。当你开辟了一定大小的位…

习惯的力量之二窗户上的洞

作者&#xff1a;范军 &#xff08;Frank Fan&#xff09;新浪微博&#xff1a;frankfan7 工作努力遭批评&#xff1f; 最近忙着给一家公司作项目&#xff0c;每天在在客户办公室上班。我做IT咨询在客户所在地办公是再自然不过了&#xff0c;不同行业和规模的公司都见过不少。…

虫洞问题(最短路)

在探索他的许多农场时&#xff0c;农夫约翰发现了许多惊人的虫洞。虫洞非常奇特&#xff0c;因为它是一条单行道&#xff0c;在你进入虫洞之前的时间将你送到目的地&#xff01;FJ的每个农场都包括N&#xff08;1≤N≤500&#xff09;田地&#xff0c;编号为1。N&#xff0c;M&…

DP(01背包)——采药

#include<bits/stdc.h> using namespace std; const int N1010; int dp[N]; int main() {int T,M;cin>>T>>M;for(int i1;i<M;i){int t,v;cin>>t>>v;for(int jT;j>t;j--)dp[j]max(dp[j],dp[j-t]v);}cout<<dp[T];return 0; }

打洞,,

UDP,TCP打洞技术 内容概述&#xff1a;在p2p通信领域中&#xff0c;由NAT(Network Address Translation&#xff0c;网络地址转换)引起的问题已经众所周知了,它会导致在NAT内部的p2p客户端在无论以何种有效的公网ip都无法访问的问题。虽然目前已经发展出多种穿越NAT的技术,但相…

神奇的口袋--刚好装满背包的方法总数

描述 题目描述 有一个神奇的口袋&#xff0c;总的容积是40&#xff0c;用这个口袋可以变出一些物品&#xff0c;这些物品的总体积必须是40。John现在有n个想要得到的物品&#xff0c;每个物品的体积分别是a1&#xff0c;a2……an。John可以从这些物品中选择一些&#xff0c;如…

白天做安全,晚上去挖洞

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;奇安信代码卫士团队 今天带来的是Kaung Htete Aung (ris) 和 Samuel Eng (samengmg) 的故事。他们来自新加坡&#xff0c;白天在顶级技术公司当全职安全工程师&#xff0c;业余时候在挖洞。数百名白…