이 기사의 주요 내용은 강 건너기의 고전적인 알고리즘 문제에 대한 자세한 설명입니다. 관심 있는 친구들이 이에 대해 배울 수 있기를 바랍니다.
Description
N명이 배를 타고 강을 건너고 싶어 합니다. 이 배는 최대 2명만 태울 수 있습니다. 따라서 모든 사람이 건널 수 있도록 앞뒤로 노를 저을 수 있도록 일종의 셔틀 장치를 마련해야 합니다. 사람마다 노를 젓는 속도가 다릅니다. 두 명의 주자의 속도는 느린 사람의 속도에 따라 다릅니다. 당신의 임무는 사람들이 강을 건너는 데 걸리는 시간을 최소화하는 전략을 결정하는 것입니다.
Input
입력의 첫 번째 줄에는 테스트 사례 수인 정수 T(1출력
각 테스트 사례에 대해 N명 모두가 강을 건너는 데 걸린 총 시간(초)을 포함하는 줄을 인쇄하세요.
샘플 입력
1
4
1 2 5 10
샘플 출력
17
------------ ------------------------------------- ------------------------------------- --
문제 분석
(다음 N명의 속도는 abcd...로 표시되며, 속도의 오름차순으로 정렬됩니다.)
- n=1일 때 시간은 a
- n일 때 =2, 시간은 b
- n=3일 때 시간은 a+b+c입니다(a가 어떤 사람과 함께 강을 건너고, a가 돌아와서 나머지 사람들과 함께 강을 건너갑니다)
- n>=일 때 4, 문제는 훨씬 더 복잡합니다. 두 사람이 강을 건너면 그 중 한 사람이 강을 건넌 후 다시 돌아오는 상황이 많기 때문입니다. 여기서 분석해야 합니다.
질문을 살펴보면 강을 건너는 데 가장 중요한 두 가지 포인트
계획 [1] 건너기 강 위의 두 사람의 소요 시간은 가장 긴 사람에 따라 결정됩니다
이를 고려하여 가장 느린 d와 두 번째로 느린 c를 합치면, 두 번째로 느린 시간 c는 무시됩니다.
옵션 [2] 돌아오는 사람의 시간은 그 사람만이 결정한다
이를 고려하여 가장 빠른 사람이 다른 사람을 하나씩 보내고 가장 빠른 사람이 배를 다시 보낼 수 있습니다
위의 Scheme을 구현해 보세요
n = 4일 때(다음 N명의 속도는 abcd로 표시되고... 속도의 오름차순으로 정렬됩니다.) ()는 소요 시간을 나타냅니다.
Scheme [1] abcd
ab(b) 과거
a(a) 돌아와
cd(d) 과거
b(b) 돌아와
ab(b) 과거
소요 시간: a+3b+d
구성표 [2] abcd
ad (d) 과거
a (a) back
ac (c) 과거
a (a) back
ab (b) 과거
시간 소요: 2a+b+c+d
계산 예시
Now 예 {1, 2, 5, 10}
Plan [1] time = 17
Plan [2] time = 19
그래서 plan [1]이 가장 짧은 시간이 걸리므로 시간은 17
하지만 만약 우리가 데이터 수정{ 1, 2, 2, 10}
계획[1] 시간 = 17
계획[2] 시간 = 16
이번에 가장 짧은 시간이 걸리는 것이 계획[2]이며 시간은 16;
만약 두 가지 계획을 결합하여 소요 시간을 대략적으로 계산하면
계획 [1]: 2b
계획 [2]: a+c
소요 시간을 알 수 있습니다 결정적 요인이 가장 빠른 a, 두 번째로 빠른 b입니다. 두 번째로 느린 c, 2b와 a+c를 비교하여 시간이 가장 적게 걸리는 솔루션을 선택하면 됩니다.
n > 4일 때 가장 빠른 두 사람을 이용하여 가장 느린 두 사람을 수송한다고 표현하면, 수송 후에는 인원이 2명씩 줄어듭니다.
관련 튜토리얼: Java 비디오 튜토리얼
다음은 참조용 AC 코드입니다
import java.util.Arrays; import java.util.Scanner; public class 过河 { static long time = 0L; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); for (int i = 0; i < m; i++) { int n = sc.nextInt(); int[] A = new int[n]; for (int j = 0; j < n; j++) { A[j] = sc.nextInt(); } Arrays.sort(A); f(A); System.out.println(time); time = 0L; } } public static void f(int[] A) { if(A.length == 3) { time += A[0] + A[1] + A[2]; return; } if(A.length == 2) { time += A[1]; return; } if(A.length == 1) { time += A[0]; return; } if(A[0] + A[A.length - 2] < A[1] * 2) { time += 2 * A[0] + A[A.length - 2] + A[A.length - 1]; }else { time += A[0] + 2 * A[1] + A[A.length - 1]; } int[] B = Arrays.copyOfRange(A, 0, A.length - 2); f(B); } }
위 내용은 강을 건너는 고전적인 알고리즘 문제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
