大疆笔试-最少充电时间
题目很复杂,但是直接暴力dfs就行
注意递归条件,要考虑到每一种充电时间
本来想记忆化一下,没想到暴力直接A了
#include<map>
#include<vector>
#include<iostream>
using namespace std;
class Solution {
public:
map<int,vector<pair<int,int>>> disMap;
int maxResult=100086;
void getResult(int allCost,int nowCharge,int dis,int now,int target,vector<int>charge,vector<bool>&visit,vector<vector<int>>&dp){
if(now==target){
maxResult=maxResult>allCost?allCost:maxResult;
return;
}
for(auto p:disMap[now]){
int next=p.first;
int nextDis=p.second;
if(visit[next]){
continue;
}
visit[next]=true;
int leastDis=0;
// 至少要充一下电,保证有电上路
if(nextDis>nowCharge){
leastDis=(nextDis-nowCharge)*charge[now];
}
// 1. 开始遍历各种充电方案
int maxV=nextDis>nowCharge?nextDis:nowCharge;
for(int i=dis;i>=maxV;i--){
//allCost+leastDis+(i-maxV)*charge[now]+nextDis
//—— leastDis:最少充电时间
//——i-maxV:多冲的千米数
//——nextDis:跑到下一个点花的时间
getResult(allCost+leastDis+(i-maxV)*charge[now]+nextDis,i-nextDis,dis,next,target,charge,visit,dp);
}
visit[next]=false;
}
}
int car_plan(vector < vector < int > > paths, int dis, int a, int b, vector < int > charge) {
if(a==b){
return 0;
}
int n=paths.size();
for(int i=0;i<n;i++){
int s=paths[i][0];
int e=paths[i][1];
int dis=paths[i][2];
disMap[s].push_back({e,dis});
disMap[e].push_back({a,dis});
}
int m=charge.size();
vector<vector<int>>dp(n,vector<int>(n,0x3f3f3f3f));
vector<bool>visit(m,false);
visit[a]=true;
getResult(0,0,dis,a,b,charge,visit,dp);
return maxResult;
}
};
int main() {
int res;
int paths_rows = 0;
int paths_cols = 0;
cin >> paths_rows >> paths_cols;
vector< vector < int > > paths(paths_rows);
for(int paths_i=0; paths_i<paths_rows; paths_i++) {
for(int paths_j=0; paths_j<paths_cols; paths_j++) {
int paths_tmp;
cin >> paths_tmp;
paths[paths_i].push_back(paths_tmp);
}
}
int dis;
cin >> dis;
int a;
cin >> a;
int b;
cin >> b;
int charge_size = 0;
cin >> charge_size;
vector<int> charge;
int charge_item;
for(int charge_i=0; charge_i<charge_size; charge_i++) {
cin >> charge_item;
charge.push_back(charge_item);
}
Solution *s = new Solution();
res = s->car_plan(paths, dis, a, b, charge);
cout << res << endl;
return 0;
}
'''
三奇智元机器人科技有限公司公司福利 70人发布