[λ°±μ€ c++] 2579 κ³λ¨ μ€λ₯΄κΈ° (μ€3)
π μλ‘
μ΄ λ¬Έμ λ λ΄κ° μκ³ λ¦¬μ¦ μ€ν°λλ₯Ό μ΄μ¬ν νμ λ νμλ λ¬Έμ λ€
κ°λ¨νλ©΄μλ λμ ν λΉμ κ°λ μ μ μ»μ μ μλ μ’μ λ¬Έμ !
μ΄ λ¬Έμ λ μ¬μ€ λμ κ³ν μ΄μΈμ μ¬κ· ν¨μλ₯Ό μ¬μ©ν΄μ ν μλ μμ§λ§ κ·Έλ κ² νΌλ€λ©΄
μκ° μ΄κ³Ό λ¬Έμ λ‘ λ§μ μ μμλ€.
π π»βοΈ νλ¦° λ΅μ
#include <iostream>
using namespace std;
int N;
int MAX;
int* stair;
int result;
void function(int idx, int nextCnt) {
if (idx == N - 1 ) {
if (nextCnt == 2) return;
if (MAX < result + stair[idx]) MAX = result + stair[idx] ;
}
else if(nextCnt != 2){
result += stair[idx];
if (nextCnt != 2) //1μΉΈμλ‘ μ¬λΌκ°κ³ μΆμλ° λ¨Όμ νμΈ
function(idx + 1, nextCnt + 1);
if (idx + 2 < N)
function(idx + 2, 0);
result -= stair[idx];
}
}
int main() {
cin >> N; if (N < 1 || N > 300) return 0 ;
stair = new int[N];
for (int i = 0; i < N; i++) cin >> stair[i];
MAX = 0; result = 0;
function(0,0);
function(1,0);
cout << MAX << endl;
return 0;
}
μ¬κ·λ₯Ό μ¬μ©ν μ½λμ΄λ€.
λͺ¨λ κ°λ₯μ±μ λ€ νμν ν κ°μ₯ μ΅λκ°μ΄ λμ€λ κ²½μ°λ₯Ό μ°Ύλ λ°©λ²μΈλ° μ΄λ κ² νλ©΄ μλμ κ°μ΄ μκ°μ΄κ³Ό κ²°κ³Όλ‘
λ¬Έμ λ₯Ό ν μ μλ€.
λμ κ³νλ² ( λ€μ΄λλ―Ή νλ‘κ·Έλλ° ) μ λν΄μ μμμΌ λ¬Έμ μ ν΄λ΅μ μ°Ύμ μ μλ€.
β¨λμ κ³νλ² κ΄λ ¨ κΈ μ°Έκ³ https://greedy-blow-you-away12.tistory.com/8
π» μ λ΅ μ½λ
#include <cstdio>
using namespace std;
int max(int a, int b) { return a > b ? a : b; }
int main () {
int n, i;
int arr[300];
int dp[300];
scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &arr[i]);
dp[0] = arr[0];
dp[1] = max(arr[0]+arr[1], arr[1]);
dp[2] = max(arr[0]+arr[2], arr[1]+arr[2]);
for (i = 3; i < n; i++) dp[i] = max(dp[i-2] + arr[i], dp[i-3] + arr[i-1] + arr[i]);
printf("%d\n", dp[n-1]);
return 0;
}
β± κ²°κ³Ό