【编程题】最小农田浇水费用

题目描述

一块农田又n块地,为了能给n块地顺利的浇上水,对于每块地可以选择在本地打井,也可以修管道从另一块地(这块地可能打了井,它的水也是从其他地引过来的)将水引过来。
当然打井和修管道的费用有差别。已知在第i块地打井需要耗费wi元,在第i、j间修管道要pij元。由于地较多,需要选择在哪些地打井,哪些地之间修管道。请编程做决策,求出最小费用。

输入输出描述

以下n行(第一个输入),一次给出整数w1, …, wn(每块地的打井费用)。紧接着是一个n*n的整数矩阵,矩阵的第i行第j列的数代表pij(两块地之间建立管道的费用)。每行的两个数之间有一个空格隔开。

6
5
4
4
3
1
20
0 2 2 2 9 9
2 0 3 3 9 9
2 3 0 4 9 9
2 3 4 0 9 9
9 9 9 9 0 9
9 9 9 9 9 0

输出最小费用值

16

代码

初步思路及实现,有错误的地方烦请指正!

def func(dig_prices, matrix):
    min_price = min(dig_prices)
    min_connected = float('inf')
    idx = [0, 0]
    for i in range(n):
        for j in range(n):
            if matrix[i][j] < min_price and matrix[i][j] < min_connected:
                min_connected = matrix[i][j]
                idx[0], idx[1] = i, j

    visited = []
    res = 0
    if min_connected != float('inf'):
        visited.append(idx[0])
        visited.append(idx[1])
        res += matrix[idx[0]][idx[1]]
        for x in range(n):
            if x in visited:
                continue
            else:
                index, dig = compare_price(x, visited, dig_prices, matrix)
                if dig:
                    res += dig_prices[x]
                    visited.append(x)
                else:
                    res += matrix[x][index]
                    visited.append(index)
    else:
        visited.append(dig_prices.index(min_price))
        res += min_price
        for x in range(n):
            if x in visited:
                continue
            else:
                index, dig = compare_price(x, visited, dig_prices, matrix)
                if dig:
                    res += dig_prices[x]
                    visited.append(x)
                else:
                    res += matrix[x][index]
                    visited.append(index)
    return res


def compare_price(i, visit, dig_price, mat):
    dig_cost = dig_price[i]
    flag = True
    idx = -1
    min_cost = float('inf')
    for j in visit:
        if mat[i][j] < dig_cost and mat[i][j] < min_cost:
            idx = j
            flag = False
            min_cost = mat[i][j]

    return idx, flag


n = int(input())
dig_prices = []
for _ in range(n):
    dig_prices.append(int(input()))

matrix = []
for _ in range(n):
    matrix.append(list(map(int, input().split())))

# print(dig_prices)
# print(matrix)

res = func(dig_prices, matrix)
print(res)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
基本农田卫星地图app是一款专门为农业领域设计的手机应用程序。该应用程序利用卫星遥感技术,配合地理信息系统,为用户提供详细的基本农田信息。 首先,该应用程序可以通过卫星图像获取农田的地理位置、土地利用类型和面积等信息。用户可以在地图上直观地了解到各个农田的布局和规模,从而为农业生产计划和决策提供依据。 其次,基本农田卫星地图app还可以提供农田的土壤质量、地形地貌等方面的细节信息。用户可以通过这些信息评估土地的适宜性和潜在的农业生产能力。这对于农业规划和土地利用管理非常重要,有助于合理利用土地资源,提高农作物的产量和质量。 此外,该应用程序还可以提供农田周边的经济、交通、市场等相关信息。用户可以通过这些数据更好地了解农田所在地的区域特点和农业发展环境,为决策提供更全面的参考。 最后,基本农田卫星地图app还具备实时更新功能,可以及时反映农田的变化情况。用户可以通过该应用程序获取到农田面积的变化、土地利用方式的调整等信息,从而及时调整农业生产计划和决策。 总而言之,基本农田卫星地图app以卫星遥感技术为基础,为用户提供详细的基本农田信息,帮助农业从业者进行农田规划、土地管理和农作物生产等工作。这款应用程序的便捷性和实用性使其成为现代农业发展中不可或缺的工具之一。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值