-
#include<cstdio> using namespace std; int n; unsigned long long a[1001][4]; unsigned long long d[1001][4]; unsigned long long min(unsigned long long a, unsigned long long b){ unsigned long long min = a; if(min > b){ min = b; } return min; } int main(){ scanf("%d", &n); for(int i = 1; i <= n; i++){ for(int j = 1; j <= 3; j++){ scanf("%d", &a[i][j]); } } d[1][1] = a[1][1]; d[1][2] = a[1][2]; d[1][3] = a[1][3]; for(int i = 2; i <= n; i++){ d[i][1] =min(d[i-1][2], d[i-1][3]) + a[i][1]; d[i][2] = min(d[i-1][3], d[i-1][1]) + a[i][2]; d[i][3] = min(d[i-1][1], d[i-1][2]) + a[i][3]; } unsigned long long max = d[n][1]; for(int i = 2; i <= 3; i++){ if(max > d[n][i]) max = d[n][i]; } printf("%lld\n", max); return 0; }
DP 기본 예제 같은느낌 오래걸리지 않고 노트에써서 풀이 하기전에 머릿속으로 풀수있었음