21计科程一帆


私信TA

用户名:uq_88617846948

访问量:5231

签 名:

搞哥毛哥在上,俺寻思俺是一个最大最强的技术小子

等  级
排  名 959
经  验 3415
参赛次数 2
文章发表 52
年  龄 19
在职情况 学生
学  校 石河子大学
专  业 计算机科学与技术

  自我简介:

憨憨一个,欢迎大佬指正

解题思路:该问题明显就是动态规划,限定的使用资源(N元预算),每件商品选择买或者不买(0/1选择),给出商品数量;只需要使用动态规划经典思路,dp二位列表,dp[i][j]=dp[i-1][j](忽略该商品不买),dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+v[i]*level[i])(可购买此商品,选择最大价值与等级积),注意v[i]*level[i]的这个地方应根据具体题目要求改变,这里是最大价值与等级积

注意事项:注意尽量用1开始的下标,不然容易搞混

参考代码:

a,b=map(int,input().split())
dp=[[0]*(a+1) for _ in range(b+1)]
for i in range(1,b+1):
   value,level=map(int,input().split())
   for j in range(1,a+1):
       if j>=value:
           dp[i][j]=max(dp[i-1][j],dp[i-1][j-value]+value*level)
       else:
           dp[i][j]=dp[i-1][j]
print(dp[b][a])

 

0.0分

1 人评分

  评论区

  • «
  • »