01背包 与 搞笑的题目背景(协会传说)的爱恨情仇

本文介绍了一维01背包问题的解决方案,通过罗神的故事作为引子,详细讲解了如何使用一维数组模板进行背包问题求解,并提供了AC代码示例。
摘要由CSDN通过智能技术生成

本题背景有意思,大家当乐子看,目前没有找到题目原题,也没有写过完全是01背包模板的题目,该篇文章大家注意其01背包一维写法的模板就好,注意各个关键点

✨欢迎来到脑子不好的小菜鸟的文章✨

      🎈创作不易,麻烦点点赞哦🎈

          所属专栏:刷题_脑子不好的小菜鸟的博客-CSDN博客

          我的主页:脑子不好的小菜鸟-CSDN博客

          文章特点:关键点和步骤讲解放在

          代码相应位置

我会陆续发布算法题题解,感兴趣的可以关注哦 

01背包-协会传说

协会里有个传奇人物罗超人
罗神就是22级算法组的天花板!!!
✨❤是银河中滚烫的星辰❤✨
✨❤是努力又向上的绝佳代表❤✨
✨❤同火焰一同迸发❤✨
✨❤是偶然坠入凡间的天使泪滴❤✨ 

只学过一天编程的罗超人就是22级软工第一巨巨!!!
 
 __     __ __     __    ____       ____    
 \ \   / / \ \   / /   |  _  \    / ___|  
   \ V /     \ V /     | | | |    \___ \  
    | |       | |      | |_| |    ___) | 
    |_|       |_|      |___ /    |____/ 
罗神敲代码很强,也很爱玩游戏,罗神巨爱玩和平暖暖,开局就直接跳机场。
罗神落在了C字楼的一号楼,因为机场人很多,罗神很快的就跑到了一个房间里。
房间里有n(n<=1e4)个配件,每个配件有c(c<=1e4)的重量和v(v<=1e4)的价值,
但罗神捡了一个2级包,容量为s,所以罗神最多当多肥的人坤呢?

Input

输入的第一行是T, 表示罗神一共要落地成盒T次
每组数据由三行组成.
第1行包含两个整数n和s .
第2行包含n个整数, 表示每一个配件的价值. 
第3行包含n个整数, 表示每个配件的重量.

Output

对每一组数据, 输出罗神可以当多肥的人坤.

Sample Input

1
5 10
1 2 3 4 5
5 4 3 2 1

Sample Output

14

思路:

为什么是01背包呢?

因为题目是啊,因为配件只要一个就够了,所以每个物品只能取一次----->01背包

物品:配件

背包:二级包的容量:S

该题我用的是一维数组的01背包模板(滚动数组)(比二维数组更节省空间),注意一维数组的外循环为物品(i),内循环为背包容量(j),且不可更改内外循环的顺序,内循环只可逆序,不可正序,否则每个物品不满足只取一次的条件

AC代码

#include <iostream>
#include <vector>
#include <algorithm>/*max函数所在头文件*/

#define quickio ios::sync_with_stdio,cin.tie(0),cout.tie(0);

using namespace std;

//01背包-协会传说
const int vn = 1e4 + 5;
const int wn = 1e4 + 5;

//确定dp数组含义
int n, s, v[vn] = { 0 }, w[wn] = { 0 }, i, j, dp[wn] = { 0 };//dp[i]:当容量为i时可拿到的最大价值

int main()
{
	quickio;

	int t;
	cin >> t;

	while (t--)
	{
		memset(dp, 0, sizeof dp);
		cin >> n >> s;

		for (i = 0; i < n; i++)
		{
			cin >> v[i];
		}
		for (i = 0; i < n; i++)
		{
			cin >> w[i];
		}

		for (i = 0; i < n; i++)//物品:该题为配件
		{
			for (j = s; j >= w[i]; j--)//背包容量:该题为二级包容量
			{//注意是逆序,若为正序则一个物品不止取一次
				dp[j] = max(dp[j], dp[j - w[i]] + v[i]);//01背包的常用递推公式
			}
		}	
		printf("%d\n", dp[s]);
	}


	return 0;
}

最后祝大家题题AC,只盼做个WA梦 ~

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑子不好的小菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值