πŸ‹ 문제링크


9465번: μŠ€ν‹°μ»€

🍎 μ½”λ“œ 제좜 기둝 (λ©”λͺ¨λ¦¬ 및 μ‹œκ°„)


https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5a0c0023-ddf8-4290-bbcb-868a64e6c5a6/_2021-03-09__8.12.00.png

λ©”λͺ¨λ¦¬ : 2676 KB

μ‹œκ°„ : 132 ms

πŸ‰ Code


#include <stdio.h>
#include <algorithm>

int dp[2][100001], arr[2][100001];
int main(){
    int t, n, i, j;   
    scanf("%d", &t);

    while(t--)
    {
        scanf("%d", &n);
		for (i = 0; i <= 1; i++)
			for (j = 1; j <= n; j++) 
				scanf("%d", &arr[i][j]);

		dp[0][0] = dp[1][0] = 0;
		dp[0][1] = arr[0][1];	
    dp[1][1] = arr[1][1];

		for (i = 2; i <= n; i++) {
			dp[0][i] = std::max(dp[1][i - 1], dp[1][i - 2]) + arr[0][i];
			dp[1][i] = std::max(dp[0][i - 1], dp[0][i - 2]) + arr[1][i];
		}
		printf("%d\\n", std::max(dp[0][n], dp[1][n]));
    }
    return (0);
}

πŸ₯ λ©”λͺ¨


πŸ“Œ ν˜„μž¬ μŠ€ν‹°μ»€μ—μ„œ 선택을 ν•  수 μžˆλŠ” μŠ€ν‹°μ»€λŠ” 1μΉΈ 였λ₯Έμͺ½ λŒ€κ°μ„  or 2μΉΈ 였λ₯Έμͺ½ λŒ€κ°μ„ μ„ 선택할 수 μžˆλ‹€

κ·Έ μ€‘μ—μ„œ μ΅œλŒ“κ°’μ΄ λ˜λŠ” 값을 μ„ νƒν•˜λŠ” 것이 good

각 μœ„μΉ˜μ—μ„œμ˜ μ΅œλŒ“κ°’μ„ κ°€μ§€λŠ” dp 배열을 μΆ”κ°€λ‘œ 생성

<곡식>

0번째 쀄

$dp[0][i] = arr[0][i] + Max(dp[1][i-1], dp[1][i-2])$

1번째 쀄

$dp[1][i] = arr[1][i] + Max(dp[0][i-1], dp[0][i-2])$

πŸ“Œ 2번째 ~ n번째 κΉŒμ§€ μˆœμ„œλŒ€λ‘œ μœ„μ˜ 곡식을 λŒ€μž…

<μ΄ˆκΈ°ν™”>

dp[0][0] = 0;
dp[1][0] = 0;
dp[0][1] = arr[0][1];	
dp[1][1] = arr[1][1];

πŸ‡ μ°Έμ‘°