상세 컨텐츠

본문 제목

[C언어/DP] 9465 : 스티커

프로그래밍/백준

by whave 2022. 2. 12. 10:15

본문

 

 

#include<stdio.h>
#include<string.h>
#define MAX 100005
int max(int a,int b){
	return a>=b?a:b;
}
int main(void){
	int t,n;
	int dp[MAX][3],arr[MAX][2];
	scanf("%d",&t);
	
	for(int k=0;k<t;k++){
		memset(dp,0,sizeof(dp));
		memset(arr,0,sizeof(arr));
		
		scanf("%d",&n);
		for(int h=0;h<2;h++){
			for(int w=0;w<n;w++){
				scanf("%d",&arr[w][h]);
			}
		}
		
		dp[0][0]=arr[0][0];
		dp[0][1]=arr[0][1];
		dp[0][2]=0;
		for(int w=1;w<n;w++){
			for(int h=0;h<3;h++){
				dp[w][0]=max(dp[w-1][1]+arr[w][0],dp[w-1][2]+arr[w][0]);
				dp[w][1]=max(dp[w-1][0]+arr[w][1],dp[w-1][2]+arr[w][1]);
				dp[w][2]=max(dp[w-1][0],dp[w-1][1]);
			}
		}
		
		printf("%d\n",max(max(dp[n-1][0],dp[n-1][1]),dp[n-1][2]));
	}
}

 

위 코드 수정

#include<stdio.h>
#include<string.h>
#define MAX 100005
int max(int a,int b){
	return a>=b?a:b;
}
int main(void){
	int t,n;
	int dp[MAX][2],arr[MAX][2];
	scanf("%d",&t);
	
	for(int k=0;k<t;k++){
		memset(dp,0,sizeof(dp));
		memset(arr,0,sizeof(arr));
		
		scanf("%d",&n);
		for(int h=0;h<2;h++){
			for(int w=0;w<n;w++){
				scanf("%d",&arr[w][h]);
			}
		}
		
		dp[0][0]=arr[0][0];
		dp[0][1]=arr[0][1];
		for(int w=1;w<n;w++){
			for(int h=0;h<3;h++){
				dp[w][0]=max(dp[w-1][1]+arr[w][0],dp[w-1][0]);
				dp[w][1]=max(dp[w-1][0]+arr[w][1],dp[w-1][1]);
			}
		}
		
		printf("%d\n",max(dp[n-1][0],dp[n-1][1]));
	}
}

'프로그래밍 > 백준' 카테고리의 다른 글

[C언어/그리디]1026 : 보물  (0) 2022.03.02
[C++/다익스트라] 1753 : 최단경로  (0) 2022.02.16
[C언어/DP] 9251 : LCS  (0) 2022.02.10
[C언어/DP] 1309 : 동물원  (0) 2022.02.09
[C언어/DP] 9461 : 파도반 수열  (0) 2022.02.08

관련글 더보기