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;
}