https://velog.io/@corone_hi/108.-%EA%B0%9C%EB%AF%B8-%EC%A0%84%EC%82%AC
108. 개미 전사
개미 전사는 부족한 식량을 충당하고자 메뚜기 마을의 식량창고를 몰래 공격하려고 한다. 메뚜기 마을에는 여러 개의 식량 창고가 있는데 식량 창고는 일직선으로 이어져 있다. 각 식량 창고에
velog.io
DP문제인데, DFS가 생각나서 DFS 로 풀었음, 근데 순열로 이루어짐, 조합으로 해야하는데 아이디어가 생각나지 않음(진행중)
즉 1,2,3,4 에서 1, 3 과 3, 1 경우의수 중 하나만 나오게 하려함.
#include<iostream>
//recursion 이용.
//branch ,level 모두 n.
#include<string>
#include<vector>
using namespace std;
int n;
int arr[100];
int path[100];
int check[100]{0,};// 자기 자신과 그 주변(-1, 1 인덱스 접근하는거 차단)
int Max = -2 * 10e7;
int visited[100]{ 0, }; // 조합목적 즉 1,4 4,1 중복 나오게 안할거 근데 이건 속도를 높일 수 있다. 속도 상관안하면, 어차피 맥스값만 구하면 되기에 무시해도 좋다. 다만, 속도향상을 해야한다.
void recursion(int level, int sum) {
if (n%2==0&&(n/2)==level) {//n갯수 짝수
for (int x = 0; x < level; ++x) {
cout << path[x]<<" ";
}
if (sum > Max) Max = sum;
return;
}
else if (n % 2 == 1 && ((n / 2) + 1) == level) // n갯수 홀수
{
if (sum > Max) Max = sum;
for (int x = 0; x < level; ++x) {
cout << path[x]<<" ";
}
cout << endl;
return;
}
for (int x = 0; x < n; ++x) {
if (check[x] > 0||check[x+1]>0)continue; // 자기자신과 그 다음 인덱스 1인 경우
if (x != 0) {
if (check[x - 1] > 0) continue;//버그해결 // x가 0이 아니면 자기자신의 -1인덱스가 1인 경우
}
check[x] = 1;
if (x != 0) if (check[x - 1] == 1)continue;
path[level] = arr[x];
recursion(level + 1,sum+path[level]);
check[x] = 0;
path[level] = 0;
}
}
int main(void) {
cin >> n;
for (int x = 0; x < n; ++x) {
cin >> arr[x];
}
recursion(0,0);
cout << "답: " << Max << endl;
}
동빈나
DP
#include <bits/stdc++.h>
using namespace std;
// 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화
int d[100];
int n;
vector<int> arr;
int main(void) {
// 정수 N을 입력받기
cin >> n;
// 모든 식량 정보 입력받기
for (int i = 0; i < n; i++) {
int x;
cin >> x;
arr.push_back(x);
}
// 다이나믹 프로그래밍(Dynamic Programming) 진행(보텀업)
d[0] = arr[0];
d[1] = max(arr[0], arr[1]);
for (int i = 2; i < n; i++) {
d[i] = max(d[i - 1], d[i - 2] + arr[i]);
}
// 계산된 결과 출력
cout << d[n - 1] << '\n';
}
'코딩테스트 > 나혼자코테(나코테)' 카테고리의 다른 글
KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2022.10.30 |
---|---|
2022 KAKAO TECH INTERNSHIP성격 유형 검사하기 (lv1) (0) | 2022.10.29 |
16926번 배열 돌리기1[다시!] (0) | 2022.09.17 |