Trang chủ Tin Học Lớp 7 Bài 4: Đường đi tốt nhất: Sân chơi là một...

Bài 4: Đường đi tốt nhất: Sân chơi là một mặt phẳng chia ra thành N hàng đánh số từ 1 đến N (1<N<100).Ở hàng thứ i (1 i N) có i ô điểm có giá trị cho tr

Câu hỏi :

Bài 4: Đường đi tốt nhất: Sân chơi là một mặt phẳng chia ra thành N hàng đánh số từ 1 đến N (1<N<100).Ở hàng thứ i (1 i N) có i ô điểm có giá trị cho trước là những số nguyên dương (không vượt quá 1000). Trò chơi là chọn một lộ trình với ô xuất phát là ô ở hàng thứ nhất, lần lượt đi qua một trong 2 ô lân cận ở hàng tiếp theo (theo hướng mũi tên) cho đến khi đến được một ô ở hàng cuối cùng và thu nhặt các điểm số có ở các ô trên đường đi qua (lộ trình sẽ thăm đúng N ô) (Hình vẽ dưới minh họa cho một ví dụ với N=4). Cho trước một bảng biểu thị giá trị điểm số các ô trên từng hàng. Hãy lập trình tìm một lộ trình hợp quy định của luật chơi và thu được điểm số cao nhất. Dữ liệu vào là tệp DUONGDI.INP có cấu trúc như sau: - Dòng thứ nhất chứa số tự nhiên N; - N dòng tiếp theo sẽ chứa các giá trị điểm số trên các ô điểm ở dòng tương ứng. Dòng thứ i sẽ có i giá trị.Các giá trị cách nhau một khoảng trắng. Dữ liệu ra là tệp DUONGDI.OUT gồm 2 dòng: - Dòng thứ nhất chứa giá trị tổng điểm lớn nhất thu được theo lộ trình tối ưu; - Dòng thứ 2 chứa N số nguyên là giá trị các ô điểm mà lộ trình tối ưu đi qua. 8 5 1 2 6 9 3 4 2 3 [TBODY] [/TBODY] Ví dụ: DUONGDI.INP DUONGDI.OUT 4 8 5 1 2 6 9 3 4 2 3 23 8 5 6 4 pascal

Lời giải 1 :

code: 
def read_input(file_path):
    with open(file_path, 'r') as file:
        n = int(file.readline().strip())
        values = [list(map(int, line.split())) for line in file.readlines()]
    return n, values

def write_output(file_path, max_score, optimal_path):
    with open(file_path, 'w') as file:
        file.write(str(max_score) + '\n')
        file.write(' '.join(map(str, optimal_path)) + '\n')

def find_optimal_path(n, values):
    dp = [[0] * i for i in range(1, n + 1)]

    dp[0][0] = values[0][0]

    for i in range(1, n):
        for j in range(i + 1):
            dp[i][j] = values[i][j] + max(dp[i - 1][j - 1] if j > 0 else 0, dp[i - 1][j] if j < i else 0)

    max_score = max(dp[n - 1])
    optimal_path = [i + 1 for i in range(n) if dp[n - 1][i] == max_score]

    return max_score, optimal_path

if __name__ == "__main__":
    input_file = "DUONGDI.INP"
    output_file = "DUONGDI.OUT"

    n, values = read_input(input_file)
    max_score, optimal_path = find_optimal_path(n, values)
    write_output(output_file, max_score, optimal_path)
bạn có thể lưu file dưới tên solve.py hoặc tùy

Sau khi chạy, bạn sẽ có file DUONGDI.OUT chứa giá trị tổng điểm lớn nhất và lộ trình tối ưu.

Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 7

Lớp 7 - Năm thứ hai ở cấp trung học cơ sở, một chuỗi quay mới lại đến và chúng ta vẫn bước tiếp trên con đường học sinh. Học tập vẫn là nhiệm vụ chính, hãy luôn kiên trì và không ngừng cố gắng!

Nguồn :

sưu tập

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK