蓝桥杯-每日一练05

题目描述

小明有一个容量为 VV 的背包。

这天他去商场购物,商场一共有 NN 种物品,第 ii 种物品的体积为 wiwi,价值为 vivi,每种物品都有无限多个。

小明想知道在购买的物品总体积不超过 VV 的情况下所能获得的最大价值为多少,请你帮他算算。

输入描述

输入第 11 行包含两个正整数 N,VN,V,表示商场物品的数量和小明的背包容量。

第 2∼N+12∼N+1 行包含 22 个正整数 w,vw,v,表示物品的体积和价值。

1≤N≤1031≤N≤103,1≤V≤1031≤V≤103,1≤wi,vi≤1031≤wi,vi≤103。

输出描述

输出一行整数表示小明所能获得的最大价值。

输入输出样例

代码显示

import os
import sys

# 请在此输入您的代码
N, V = map(int, input().split())
dp = [0]*(V+1)
for _ in range(N):
  w, v = map(int, input().split())
  for j in range(w, V+1):
    dp[j] = max(dp[j], dp[j-w]+v)
print(dp[-1])

题目描述

小明买了 nn 件白色的衣服,他觉得所有衣服都是一种颜色太单调,希望对这些衣服进行染色,每次染色时,他会将某种颜色的所有衣服寄去染色厂,第 ii 件衣服的邮费为 aiai 元,染色厂会按照小明的要求将其中一部分衣服染成同一种任意的颜色,之后将衣服寄给小明, 请问小明要将 nn 件衣服染成不同颜色的最小代价是多少?

输入描述

第一行为一个整数 nn ,表示衣服的数量。

第二行包括 nn 个整数 a1,a2...ana1,a2...an 表示第 ii 件衣服的邮费为 aiai 元。

(1≤n≤105,1≤ai≤1091≤n≤105,1≤ai≤109 )

输出描述

输出一个整数表示小明所要花费的最小代价。

输入输出样例

代码显示

import os
import sys

# 请在此输入您的代码,构造哈夫曼树的过程,PriorityQueue优先队列


   # 寄出 5 1 3 2 1 代价为 12 ,将5染为不同颜色,厂家寄回

   # 寄出 1 3 2 1 代价为 7 ,将3染为不同颜色,厂家寄回

   # 寄出 1 2 1 代价为 4 ,将2染为不同颜色,厂家寄回

   # 寄出 1 1 代价为 2 ,任选其中一个1染为不同颜色,厂家寄回

   # 总代价为 12 + 7 + 4 + 2 = 25

import queue

q = queue.PriorityQueue()
n = int(input())
a = list(map(int, input().split()))

for i in range(len(a)):
    q.put(a[i])

res = 0

while q.qsize() > 1:
    t = q.get() + q.get()
    res += t
    q.put(t)


print(res)

题目描述

小明一共有 nn 块锻造石,第 ii 块锻造石的属性值为 aiai。

现在小明决定从这 nn 块锻造石中任取两块来锻造兵器。

通过周密计算,小明得出,只有当两块锻造石的属性值的差值等于 CC,兵器才能锻造成功。

请你帮小明算算,他有多少种选取锻造石的方案可以使得锻造成功。

输入描述

第一行包含两个整数 n,Cn,C,其含义如题所述。

接下来一行包含 nn 个整数,分别表示 a1,a2,⋯ ,ana1,a2,⋯,an。

1≤N≤2×1051≤N≤2×105,∣ai∣≤104∣ai∣≤104,0≤C≤1090≤C≤109。

输出描述

输出共一行,包含一个整数,表示答案。

输入输出样例

代码显示

import os
import sys

# 请在此输入您的代码取尺法
n,C=map(int,input().split())
a=list(map(int,input().split()))

ans = 0
a.sort()
d = {}

for i in a:
  ans += d.get(i-C,0)
  d[i] = d.get(i,0)+1

print(ans)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值