【高速道路の休憩所における料金計画】 c++

出典: http://t.csdn.cn/5fIdA
タイトル 説明
張三さんは航続距離 1,000 キロメートルの自動運転新エネルギー車を購入しました。ある日、車をフル充電した後、A 市から D キロメートル離れた B 市まで高速で移動する必要があります。

カーナビには、途中に充電サービスを提供できる休憩所が N か所あり、各休憩所では現在の充電待ち時間(時間)がリアルタイムで表示されます。
時間を最適化した休憩所の充電計画を計画し、最短の移動時間を返すようにご協力ください。

計算の便宜上、高速道路の走行速度は100km/hに固定されています。計画を立てる際に、安全な航続距離の数を考慮する必要はありませんが、車の電気が完全になくなっても、航続距離 1,000 キロメートルの車は時速 100 キロメートルで 10 時間走行できます。充電時間は1回あたり1時間に固定されており、完了後にバッテリーは完全に充電されます。各ステーションの充電待ち時間は変化せず、充電待ち時間の処理に電力は消費されません。

説明を入力してください

1行目はA-B間の距離Dをキロメートル単位で示し、2行
目は途中の休憩所の数Nを示し、
3行目以降は各行に休憩所間の距離を示すデータが2つずつあります。停留所とA都市、および充電待ち行列 所要時間(時間)、(休憩所は近い順にソートされます)
0<=D<=1000000、Dは100の整数倍
0<=N<=10000

1500
4
300 2
600 1
1000 0
1200 0

出力の説明

移動に費やした最短時間(時間)。
目的地に到達できない場合は、-1 が返されます。

16

説明:
最良の解決策:
1,500 キロメートルの移動で 3 番目の休憩所 (位置 1000) でのみ充電: 15 時間、
充電の待機時間は 0 時間、充電は 1 時間。
最速の移動には合計 16 時間かかります。

その他のプラン: 2 番目の休憩所 (位置 600) で充電し、合計 17 時間を費やす その他の
プラン: 2 番目の休憩所 (位置 600) と 4 番目の休憩所 (位置 1200) で充電し、合計 19 時間を費やす時間

一連の考え

#include<bits/stdc++.h>

using namespace std;

vector<int> power_dis;
vector<int> power_time;

unordered_map<string, int> memo;

int dp(int pow, int dis, int N) {
    
    
	// 
	if (pow >= dis) return dis / 100;
	//
	string key = to_string(pow) + "," + to_string(dis);
	cout << key << endl;
	if (memo.count(key)) return memo[key];
	int res = INT_MAX;
	int can = dis - pow;
	for (int i = 0; i < N; i++) {
    
    
		if (can > power_dis[i]) continue;
		if (power_dis[i] == dis) continue;
		int power_d = power_dis[i];
		int power_t = power_time[i];
		if (dp(1000, power_d, N) == -1) continue;
		int tmp = (dis - power_d) / 100 + power_t + 1 + dp(1000, power_d, N);
		res = min(res, tmp);
	}
	if (res == INT_MAX) res = -1;
	memo[key] = res;
	return res;
}


int main() {
    
    
	int D, n;
	cin >> D;
	cin >> n;
	power_dis.resize(n);
	power_time.resize(n);
	for (int i = 0; i < n; i++) cin >> power_dis[i] >> power_time[i];
	// base case
	for (int i = 0; i < n; i++) power_dis[i] = D - power_dis[i];
	cout << dp(1000, D, n);
	return 0;
}

おすすめ

転載: blog.csdn.net/LemonShy2019/article/details/126747376