刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

编程实现:

小蓝桌子上摆放着一个容积为m的书包及n件不同的商品,且每件商品上都标有商品的体积和商品的价值。

小蓝要满足以下要求挑选商品装入书包中

要求1:挑选的商品总体积不超过书包的容积;

要求2:挑选的商品商品总价值最大。

请你帮助小蓝计算出能装入书包的商品的最大价值。

输入描述:

第一行输入两个正整数m和n,m表示书包的容积,n表示商品的数量。两个正整数之间一个英文逗号隔开

第二行输入n个正整数表示商品的体积,正整数之间一个英文逗号隔开

第三行输入n个正整数表示商品的价值,正整数之间一个英文逗号隔开(商品价值的输入顺序对应商品体积输入顺序)

输出描述:

输出装入书包的商品的最大价值

 

样例输入:

11,3
2,6,4
1,5,2

样例输出:

7

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```pythonm, n = map(int, input().split(','))volumes = list(map(int, input().split(',')))values = list(map(int, input().split(',')))dp = [[0] * (m + 1) for _ in range(n + 1)]for i in range(1, n + 1):for j in range(volumes[i - 1], m + 1):dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - volumes[i - 1]] + values[i - 1])print(dp[n][m])```

解析:

【喵呜刷题小喵解析】:

本题可以使用动态规划来解决。

首先,定义二维数组dp,其中dp[i][j]表示前i个商品中挑选总体积不超过j的商品的最大价值。

然后,遍历每个商品,对于每个商品,有两种选择:

1. 不选该商品,即dp[i][j] = dp[i-1][j];

2. 选该商品,即dp[i][j] = dp[i-1][j-volumes[i-1]] + values[i-1]。

其中,volumes[i-1]表示第i个商品的体积,values[i-1]表示第i个商品的价值。

最后,输出dp[n][m]即可,表示前n个商品中挑选总体积不超过m的商品的最大价值。

具体实现时,需要注意输入和输出的格式,以及数组索引的起始值。
创作类型:
原创

本文链接:编程实现: 小蓝桌子上摆放着一个容积为m的书包及n件不同的商品,且每件商品上都标有商品的体积和商品的

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share