Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

1R/2016 09 11: Difference between revisions

From ZeroWiki
No edit summary
(Repair batch-0001 pages from live compare)
 
(5 intermediate revisions by 4 users not shown)
Line 6: Line 6:
= 참가자 =
= 참가자 =
* 박인서
* 박인서
 
* 15이원준
* [[곽정흠]]
= 코드 =
= 코드 =
== 15이원준 ==
== 15이원준 ==
Line 29: Line 30:
       vec.resize(size, 0);
       vec.resize(size, 0);
       int i = 0;
       int i = 0;
       vec[0] = in[0];
       vec[0] = in[0];
       for(int j = 1; j<N; j++){ //줄 변경
       for(int j = 1; j<N; j++){ //줄 변경
         for(int m = 0; m<j; m++){ //m번째 줄 전부 탐색
         for(int m = 0; m<j; m++){ //m번째 줄 전부 탐색
           for(int k = 0; k < 2; k++){ //아왼, 아오
           for(int k = 0; k < 2; k++){ //아왼, 아오
             if(vec[i + k + j] < vec[i] + in[i + k + j])
             if(vec[i + k + j] < vec[i] + in[i + k + j])
               vec[i + k + j] = vec[i] + in[i + k + j];
               vec[i + k + j] = vec[i] + in[i + k + j];
           }
           }
           i++;
           i++;
Line 41: Line 42:
       int max = 0;
       int max = 0;
       for(int j = size-N; j <size; j++){
       for(int j = size-N; j <size; j++){
         if(max < vec[j]){
         if(max < vec[j]){
           max = vec[j];
           max = vec[j];
         }
         }
       }
       }
Line 50: Line 51:
  #include <iostream>
  #include <iostream>
  #include <algorithm>
  #include <algorithm>
  int a[501][501], dp[501][501];
  int a[501][501], dp[501][501];
   
   
  int main() {
  int main() {
Line 58: Line 59:
  for (int i = 0; i<n; i++) {
  for (int i = 0; i<n; i++) {
  for (int j = 0; j <= i; j++) {
  for (int j = 0; j <= i; j++) {
  std::cin >> a[i][j];
  std::cin >> a[i][j];
  }
  }
  }
  }
   
   
  dp[0][0] = a[0][0];
  dp[0][0] = a[0][0];
  for (int i = 1; i<n; i++) {
  for (int i = 1; i<n; i++) {
  dp[i][0] = dp[i - 1][0] + a[i][0];
  dp[i][0] = dp[i - 1][0] + a[i][0];
  for (int j = 1; j<i; j++) {
  for (int j = 1; j<i; j++) {
  dp[i][j] = std::max(dp[i - 1][j - 1], dp[i - 1][j]) + a[i][j];
  dp[i][j] = std::max(dp[i - 1][j - 1], dp[i - 1][j]) + a[i][j];
  }
  }
  dp[i][i] = dp[i - 1][i - 1] + a[i][i];
  dp[i][i] = dp[i - 1][i - 1] + a[i][i];
  }
  }
   
   
  int max = 0;
  int max = 0;
  for (int i = 0; i<n; i++) {
  for (int i = 0; i<n; i++) {
  if (max<dp[n - 1][i]) max = dp[n - 1][i];
  if (max<dp[n - 1][i]) max = dp[n - 1][i];
  }
  }
   
   
Line 80: Line 81:
  }
  }
== 곽정흠 ==
== 곽정흠 ==
 
#include <stdio.h>
typedef struct {
int num;
int maxSum;
}node;
node tri[500][500];
int main() {
int n;
int maxRoute;
int maxFinal;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
scanf("%d", &(tri[i][j].num));
if (i == 0 && j == 0) {
tri[i][j].maxSum = tri[i][j].num;
}
else {
if (j != 0 && j != i) {
if (tri[i - 1][j - 1].maxSum > tri[i - 1][j].maxSum) {
tri[i][j].maxSum = tri[i - 1][j - 1].maxSum + tri[i][j].num;
}
else {
tri[i][j].maxSum = tri[i - 1][j].maxSum + tri[i][j].num;
}
}
else if (j == 0 && i != 0) {
tri[i][j].maxSum = tri[i - 1][j].maxSum + tri[i][j].num;
}
else if (j == i&&j != 0) {
tri[i][j].maxSum = tri[i - 1][j - 1].maxSum + tri[i][j].num;
}
}
}
}
maxFinal = tri[n - 1][0].maxSum;
for (int i = 1; i < n; i++) {
if (tri[n - 1][i].maxSum > maxFinal) {
maxFinal = tri[n - 1][i].maxSum;
}
}
printf("%d", maxFinal);
return 0;
}
= 아이디어 =
= 아이디어 =
== 15이원준 ==
== 15이원준 ==
== 박인서 ==
== 박인서 ==
== 곽정흠 ==
== 곽정흠 ==

Latest revision as of 23:55, 26 March 2026

오늘의 문제

참가자

코드

15이원준

#include<iostream>
#include<stdio.h>
#include<vector>

using namespace std;

int main(){
      vector<int> in;
      vector<int> vec;
      int N;
      scanf("%d", &N);
      int size;
      size = N * (N + 1) / 2;
      for(int i = 0; i<size; i++){
        int temp;
        scanf("%d", &temp);
        in.push_back(temp);
      }
      vec.resize(size, 0);
      int i = 0;
      vec[0] = in[0];
      for(int j = 1; j<N; j++){ //줄 변경
        for(int m = 0; m<j; m++){ //m번째 줄 전부 탐색
          for(int k = 0; k < 2; k++){ //아왼, 아오
            if(vec[i + k + j] < vec[i] + in[i + k + j])
              vec[i + k + j] = vec[i] + in[i + k + j];
          }
          i++;
        }
      }
      int max = 0;
      for(int j = size-N; j <size; j++){
        if(max < vec[j]){
          max = vec[j];
        }
      }
      printf("%d\n", max);
}

박인서

#include <iostream>
#include <algorithm>
int a[501][501], dp[501][501];

int main() {
	int n;

	std::cin >> n;
	for (int i = 0; i<n; i++) {
		for (int j = 0; j <= i; j++) {
			std::cin >> a[i][j];
		}
	}

	dp[0][0] = a[0][0];
	for (int i = 1; i<n; i++) {
		dp[i][0] = dp[i - 1][0] + a[i][0];
		for (int j = 1; j<i; j++) {
			dp[i][j] = std::max(dp[i - 1][j - 1], dp[i - 1][j]) + a[i][j];
		}
		dp[i][i] = dp[i - 1][i - 1] + a[i][i];
	}

	int max = 0;
	for (int i = 0; i<n; i++) {
		if (max<dp[n - 1][i]) max = dp[n - 1][i];
	}

	std::cout << max;
	return 0;
}

곽정흠

#include <stdio.h>

typedef struct {
	int num;
	int maxSum;
}node;

node tri[500][500];

int main() {
	int n;
	int maxRoute;
	int maxFinal;
	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		for (int j = 0; j <= i; j++) {
			scanf("%d", &(tri[i][j].num));

			if (i == 0 && j == 0) {
				tri[i][j].maxSum = tri[i][j].num;
			}
			else {
				if (j != 0 && j != i) {
					if (tri[i - 1][j - 1].maxSum > tri[i - 1][j].maxSum) {
						tri[i][j].maxSum = tri[i - 1][j - 1].maxSum + tri[i][j].num;
					}
					else {
						tri[i][j].maxSum = tri[i - 1][j].maxSum + tri[i][j].num;
					}
				}
				else if (j == 0 && i != 0) {
					tri[i][j].maxSum = tri[i - 1][j].maxSum + tri[i][j].num;
				}
				else if (j == i&&j != 0) {
					tri[i][j].maxSum = tri[i - 1][j - 1].maxSum + tri[i][j].num;
				}
			}
		}
	}

	maxFinal = tri[n - 1][0].maxSum;
	for (int i = 1; i < n; i++) {
		if (tri[n - 1][i].maxSum > maxFinal) {
			maxFinal = tri[n - 1][i].maxSum;
		}
	}

	printf("%d", maxFinal);

	return 0;
}

아이디어

15이원준

박인서

곽정흠