输入
鱼被编号为1,2,3,4...n。每条鱼都有对应的价格和重量
第1行:含三个整数n,m, p(n<=10^3;0<=m<=5*10^3;p<=10^4;),分别表示有n条鱼,m个朋友关系,你有p的钱。第2至n+1行:每行含两个整数ci,di,分别表示编号为i的鱼的价格和重量
第n+2至n+1+m行,每行ui、vi表示编号为ui和vi的两条鱼互为朋友
输出
输出你能获得的最大价值w
样例输入
5 3 10
3 10
3 10
3 10
5 100
1e 1
1 3
3 2
4 2
样例输出
1
题目呢
该回答引用GPTᴼᴾᴱᴺᴬᴵ
以下是题目的完整代码实现。使用了贪心算法,将鱼按照单位重量的价值从大到小排序,然后从大到小选择鱼,直到购买的总重量超过背包的容量或者没有鱼可选为止。
n, m, p = map(int, input().split())
# 鱼的价格和重量
fishes = []
for i in range(n):
c, d = map(int, input().split())
fishes.append((c, d))
# 朋友关系
friends = []
for i in range(m):
u, v = map(int, input().split())
friends.append((u, v))
# 计算每条鱼的单位重量的价值
values = []
for i in range(n):
value = fishes[i][0] / fishes[i][1]
values.append((value, i))
# 将鱼按照单位重量的价值从大到小排序
values.sort(reverse=True)
# 从大到小选择鱼,直到购买的总重量超过背包的容量或者没有鱼可选为止
total_weight = 0
total_value = 0
for value, i in values:
if total_weight + fishes[i][1] <= p:
total_weight += fishes[i][1]
total_value += fishes[i][0]
if total_weight == p:
break
print(total_value)
输入样例:
5 3 10
3 10
3 10
3 10
5 100
1 1
1 3
3 2
4 2