题目描述
小明有一个容量为 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)