//// //// main.cpp //// Q17 //// //// Created by AkihiroKOBAYASHI on 7/15/15. //// Copyright (c) 2015 Akhr5884. All rights reserved. //// #include int n, c, v; int s[1600],t[1600],y[1600],m[1600]; int temp[51][51]; int totaltime= -1; int min(int a, int b) { if(a <= b) { return a; } return b; } void search(int start, int money, int time) { int count; if(start == n) { if(totaltime == -1) { totaltime = time; } else { totaltime = min(totaltime, time); } } else { for(count = 0; count < v; count++) { if(temp[s[count]][t[count]] == 0 && s[count] == start && money - y[count] >= 0) { temp[s[count]][t[count]] = 1; search(t[count], money - y[count], time + m[count]); } } } return; } int main(int argc, const char * argv[]) { std::cin >> n >> c >> v; int count, countA; for(count = 0; count < v; count++) { std::cin >> s[count]; } for(count = 0; count < v; count++) { std::cin >> t[count]; } for(count = 0; count < v; count++) { std::cin >> y[count]; } for(count = 0; count < v; count++) { std::cin >> m[count]; } for(count = 0; count < 51; count++) { for(countA = 0; countA < 51; countA++) { temp[count][countA] = 0; } } search(1, c, 0); std::cout << totaltime << "\n"; return 0; } //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include // //using namespace std; //const int INF = numeric_limits::max() / 2 - 1; // //int main() //{ // typedef tuple edge; // vector> G; // // int N, C, V; // { // cin >> N >> C >> V; // vector S(V), T(V), Y(V), M(V); // for (int i = 0; i < V; i++) { // cin >> S[i]; // S[i]--; // } // for (int i = 0; i < V; i++) { // cin >> T[i]; // T[i]--; // } // for (int i = 0; i < V; i++) { // cin >> Y[i]; // } // for (int i = 0; i < V; i++) { // cin >> M[i]; // } // G.assign(N, vector()); // for (int i = 0; i < V; i++) { // G[S[i]].push_back(edge(T[i], Y[i], M[i])); // } // } // // vector> dp(N, vector(C + 1, INF)); // dp[0][C] = 0; // for (int i = 0; i