(每日一练28821)题目名称:筛选宝物

文盲老顾
WEB应用领新星创作者
博客专家认证
2023-04-18 21:53:39

>已知存在n个宝物,每个宝物都有自己的质量m和价值v,在考虑选择宝物时只能选择总质量小于等于M的方案,请问在最优方案下选择宝物,能获取到最大价值V是多少?

 

经典的01背包问题,真的是不想做这个题目了。

python 来一版

n,M = map(int,input().split())
vector = [list(map(int,input().split())) for _ in range(n)]
dp = [[0 if v < vector[0][0] else vector[0][1] for v in range(M + 1)]]
for i in range(1,n):
      dp.append([dp[i - 1][v] if v < vector[i][0] else max(dp[i - 1][v],dp[i - 1][v - vector[i][0]] + vector[i][1]) for v in range(M + 1)])
print(dp[-1][-1])

js 来一版

var m = Array.from(readline().split(' ')).map(function(v){return parseInt(v)});
var arr = [];
var dp = [];
Array.from(new Array(m[0])).forEach(function(){
    arr.push(Array.from(readline().split(' ')).map(function(v){return parseInt(v)}));
    var i = dp.length;
    dp.push([]);
    Array.from(new Array(m[1] + 1)).forEach(function(){
        var j = dp[i].length;
        dp[i].push(j < arr[i][0] 
            ? (i == 0 ? 0 : dp[i - 1][j])
            : (i == 0 ? arr[i][1] : (dp[i - 1][j] > dp[i - 1][j - arr[i][0]] + arr[i][1] ? dp[i - 1][j] : dp[i - 1][j - arr[i][0]] + arr[i][1]))
            );
    });
});
print(dp[m[0] - 1][m[1]])

 

...全文
104 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

321

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧