Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

적을 물리치는 데 필요한 최소 작업 수를 알아내는 C++ 프로그램

<시간/>

주인공이 칼을 사용하여 적을 물리치는 비디오 게임을 하고 있다고 가정해 보겠습니다. 주인공은 칼을 사용하여 적을 베거나 적을 향해 던질 수 있습니다. 주인공이 칼을 던지면 다시 회수할 수 없다. 칼 i가 입힌 피해는 각 요소가 {slash, throw} 형식인 배열 'knives'에 표시됩니다. '베기'는 그 칼로 적에게 베는 피해를 의미하고 '던지기'는 특정 칼을 던져 적에게 입히는 피해를 의미합니다. 베기는 횟수에 제한이 없지만 칼은 한 번만 던질 수 있습니다. 이제 체력을 가진 적이 나타납니다. h. 적을 물리치기 위해 필요한 최소한의 조작(베기 또는 던지기)을 찾아야 합니다. 적은 체력이 0일 때 패배합니다.

따라서 입력이 n =2, h =11, knives ={{4, 5}, {3, 6}}인 경우 출력은 2가 됩니다.

주인공이 두 칼을 모두 던질 경우 입히는 피해는 5 + 6 =11입니다. 적의 체력은 0이 되므로 패배합니다.

단계

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

val :=0for initialize i :=0, i  val인 경우 h:=h - knives[i]의 두 번째 값(res by 1) h <=0이면 print(res) exit 그렇지 않으면 루프에서 나옵니다. 

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include 네임스페이스 std;void solve(int n, int h, vector> knives){ int val =0; for(int i =0; i  val){ h -=knives[i].second; 해상도++; if(h <=0){ cout <> 칼 ={{4, 5}, {3, 6}}; 해결(n, h, 칼); 반환 0;}

입력

2, 11, {{4, 5}, {3, 6}}

출력

2