3,10,[3,7,8],[(1,2)]
2
先去1号城市再去2号城市,花费为 3+7=10
A[0]代表1号城市的开销A[1]代表2号城市的开销,以此类推
#include <bits/stdc++.h> using namespace std; struct Point { int x; int y; }; class Solution { public: /** * * @param N int整型 N * @param V int整型 V * @param A int整型一维数组 A * @param ALen int A数组长度 * @param List Point类vector List * @return int整型 */ vector<int> G[21]; int Max = 0; bool dp[1<<20]; void DFS(int s, int N, int V, int *A, int cnt){ if(dp[s]) return; dp[s] = true; Max = max(Max, cnt); for(int i=0;i<N;i++){ if(!(s & (1<<i)) && A[i]<=V){ bool f = true; for(auto &v: G[i]){ if(!(s & (1<<v))){ f = false; break; } } if(f) DFS(s|(1<<i), N, V-A[i], A, cnt+1); } } } int Travel(int N, int V, int* A, int ALen, vector<Point>& List) { for(auto &p: List) if(p.x!=p.y) G[p.y-1].push_back(p.x-1); DFS(0, N, V, A, 0); return Max; } }; int main(){ vector<Point> L; L.push_back({1,2}); int A[3] = {3, 7, 8}; Solution solution; cout<<solution.Travel(3, 10, A, 3, L)<<endl; return 0; }