우선 나는 아직 학생이고 새벽시간이기 때문에 개판으로 짰고, 네이밍 개판인건 갤러들은 이해좀 바랍니다.
그리고 소스 붙여넣기도 할 줄 모르겠네
#include <cstdio>
#include <vector>
#include <queue>
#define INF 1901910910
using namespace std;
class ABC
{
public:
int n[6];
int number, cost;
ABC(int count[], int nb, int ct)
{
n[1] = count[1];
n[2] = count[2];
n[3] = count[3];
n[4] = count[4];
n[5] = count[5];
number=nb, cost=ct;
}
};
int main()
{
vector<int> Arr(101, INF), Cost(101); //코스트 저장하는 배열
queue<ABC> Queue;
int init[6] = { 0, 0, 0, 0, 0, 0 };
int no[6]; // 각 넘을수 있는 칸의 제한 수
for (int i = 1; i <= 5; i++)
scanf("%d", &no[i]);
for (int i = 1; i <= 100; i++)
scanf("%d", &Cost[i]);
Arr[1] = 0;
Queue.push(ABC(init, 1, 0));
while (!Queue.empty())
{
ABC pos = Queue.front();
Queue.pop();
for (int i = 1; i <= 5; i++)
{
if (pos.n[i] + 1 > no[i] || pos.number+i>100) //제한횟수 초과
continue;
pos.n[i]++;
if (pos.cost + Cost[pos.number + i] < Arr[pos.number + i])
{
Arr[pos.number + i] = pos.cost + Cost[pos.number + i];
Queue.push(ABC(pos.n, pos.number + i, Arr[pos.number + i]));
}
pos.n[i]--;
}
}
printf("%d", Arr[100]);
}
일단 테스트는 안해봤고 대충 내 머릿속에 있는 알고리즘 끄적여 봤음
컴파일은 됨
아 그리고 전에 넘어갔던 거리만큼 또 안된다는건 나중에 봐서 넣지 못했는데 그 경우엔 구조체에 전에 넘었던 거리를 추가해서 비교해주면 될듯
노가다로 만들어줘야됨
그래서 결론은 재귀로 짜
궁금증이 해결됬니?
재귀로해도 1에서 5는 내가 넣어줘야 하는거 아님?
ㄴㄴ 재귀에서는 (현재 단계 - 점프 뛸 칸) < 0 인 케이스는 먼저
걸러 주면 됨
그리고 충고 몇개 할게
이해가 안감
모르는거 물어볼때 제발 처음부터 문제 전체를 올려
그리고 모르면 상대방생각을 이해하려고 좀 해바
무조건 니 생각이랑 다르다고 아닌데?아닌데?
재귀라는게 맨밑에는 값이 잇어야 개를 바탕으로 올라가는거 아님?
이지랄 하지말고
음..재귀가 스택 구조로 호출하는 건 알지?
아니 탑다운이 어떻게 되냐고
위에서부터 구하다가, 아직 구해지지 않은 값이 있으면, 현재까지는 걍 스택에 올리고
필요한 값을 구하는 함수로 들어가서
다 구한다음 돌아와서 하던 행위를 마저 하는거지
그니까 스택 호출 하다가 맨 마지막에는 밑에거 값을 줘야하는거 아니냐고
이런식으로 하는게 탑다운
우왕 채팅방이다
그니까 그때를 위에 말한
예외 케이스로 처음에 처리해주라고
현재 케이스 - 점프 뛸칸 < 0
아니 예외로 그렇게 처리하라는게 그경우에 따로 코스트 값을 넣어주라는건지
따로 넣어줘야하는거 아니냐고
위에서도 불가능한 경우는 아예 최소값 비교대상으로 안보잖아?
위의 예외에서 비교 대상에서 제외시키면
자연스럽게 같은 함수로 1~5단계 기저케이스도 구할 수 있게 됨
나 이제간다
멀 같는함수로 된다는거야
먼 함수
함수를 멀 어떻게 짜길래 자연스럽게 들어간다는건데
아오 존나 좀 징징대지말고
이정도 알려줬으면 좀
스스로 어떻게하면 저렇게 구현할 수 있을까
생각 좀 해보고 댓글달어
징징징 빨리 내놔 빨리 알려줘이이이~~
이지랄좀 하지말고 진자
아니 이해가 안되게 말을해놓고
머가 자연스럽게 들어가는데 병신아 진짜
뭐시여? 채팅이여?
내가 키포인트는 다 말함
좀 생각좀하라고
재귀로 짜다가 시발 맨밑에는 내가 값을 넣어줘야 들어가지
빡머가리새키야
아 좆같네 시발 말안할려면 꺼져라
아오 생각하기 귀찮으면 걍 니가 노가다로 1~5단계는 다 넣어주던지
병신아 니혼자 맘속에서 설명해라
그니까 디피테이블 참조 인덱스 범위가
0이하로 내려가는건
애초에 비교대상에서 제외시켜서
자연스럽게 처리하라는 말이야
그러면은 1단계에서는 전부 벗어나니까 본인더한것만 있겠지?
자연그럽게 뭘 시발
2단계에서는 0에서 뛰오거나, 1에서 뛰온것만 비교하니까 또 맞지?
이런식으로 하라고
아오 너 저능아냐?
ㄹㅇ 떠먹여줘도 모르네
코드한줄 안쓰고 이정도로 설명한것도
존나 친절하게 알려주는데
애초에 니말 하나도 이해안감
응 너가 멍청해서 그래
dp[55][3][4][5][3][4] 이건 뭐 6차원 배열이냐?? 이게 뭘 어떻게하란거야
미친놈아 6차원 배열 짜라고???
아 씨발 병신같은게
그래 병신아
좆도 말도 못하는 색기가 설명이랍시고 욕이나 처하면서
메모리 초과안나는 범위에서
문제 해결하는 방법이야
미친색기야 6차원 배열을 어케짜냐
야 멍청한 새키야
잘 모르면 제발 겸손하기라도
ㅎ하라고 햇지?
아오 존나 자세하게 이야기해줘도
무슨말인지 못알아쳐먹으니
그와중에 존나 내 설명이 부족했다고 징징?
너는 진짜 내 옆에 있었으면 대갈통 후려쳐맞으면서 배웠다
아니 저렇게 니도 코딩못할걸
6차원배열을 뭘 포문을 어떻게 돌려서 어떻게 구할건데 병신아
아 왜못해 저것보다 더 복잡하게도 하는데
6차원 배열이라고 포문6개 겹칠거라고 생각하는거야?
제한 횟수 10인게 괜히 10인게 아니라
딱 맞춰서 준거야 나처럼 풀라고
거기다가 안되는경우는 빼줘야 되는데 그걸 어떻게 for문에 조건걸거며
만약에 10 넘어갔으면
비트마스크 써서 5개단계상태 정수 하나로 맵핑시켜서
시발 말로는 누가못해
더 복잡하게 했었을텐데
10이라서 걍 6차원배열로 되는거야
말로는 누가 못해가 아니라
저지 올리면 내가 코드 보여줄게
코드올린색기가 쓴 구조체가 낫겟다 병신아
6차원배열 씨발
포문 6개 안돌리면 최소갑 어떻게 얻을건데 병신아
아 개빡치네 씨발
포문 6번이면 시간복잡도는 시발놈아
개같은 소리 하고잇어 시발 아 빡쳐
ㅋㅋ ㅂㅅ 답변 던져놓고 도망간 애가 질문자 인성 바로 읽었네 빡통이면 겸손하기나 할것이지
클래스 이름보고 거름 - dc App