우선 나는 아직 학생이고 새벽시간이기 때문에 개판으로 짰고, 네이밍 개판인건 갤러들은 이해좀 바랍니다.


그리고 소스 붙여넣기도 할 줄 모르겠네


#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]);

}


일단 테스트는 안해봤고 대충 내 머릿속에 있는 알고리즘 끄적여 봤음


컴파일은 됨


아 그리고 전에 넘어갔던 거리만큼 또 안된다는건 나중에 봐서 넣지 못했는데 그 경우엔 구조체에 전에 넘었던 거리를 추가해서 비교해주면 될듯