【题解】CF301B Yaroslav and Time

CF301B

这不最短路的板子题吗?

思路

\(ak\) 代表走到第 \(k\) 点时的可恢复单位时间的值。

\(i\)\(j\) 的距离是 \(\left ( \left | xi-xj \right | + \left | yi-yj \right | \right ) \times d-ak\)

再打一下最短路代码,建议 Floyd,因为短

AC Code

#include <bits/stdc++.h>
using namespace std;
int n,d,a[105],x[105],y[105],dis[105][105];
void floyd() {
	for(int k=1; k<=n; k++)
		for(int i=1; i<=n; i++)
			for(int j=1; j<=n; j++)
				if(dis[i][j]>dis[i][k]+dis[k][j]&&j!=k&&i!=k)
					dis[i][j]=dis[i][k]+dis[k][j];
}
int main() {
	cin>>n>>d;
	for(int i=2; i<n; i++) cin>>a[i];
	for(int i=1; i<=n; i++) cin>>x[i]>>y[i];
	for(int i=1; i<=n; dis[i][i]=0,i++)
		for(int j=i+1; j<=n; j++)
			dis[i][j]=(abs(x[j]-x[i])+abs(y[j]-y[i]))*d-a[j],dis[j][i]=(abs(x[j]-x[i])+abs(y[j]-y[i]))*d-a[i];
	floyd();
	cout<<dis[1][n];
	return 0;
}
posted @ 2024-04-06 17:59  Kcjhfqr  阅读(18)  评论(0)    收藏  举报
.poem-wrap { position: relative; width: 1000px; max-width: 80%; border: 2px solid #797979; border-top: none; text-align: center; margin: 40px auto; } .poem-left { left: 0; } .poem-right { right: 0; } .poem-border { position: absolute; height: 2px; width: 27%; background-color: #797979; } .poem-wrap p { width: 70%; margin: auto; line-height: 30px; color: #797979; } .poem-wrap h1 { position: relative; margin-top: -20px; display: inline-block; letter-spacing: 4px; color: #797979; font-size: 2em; margin-bottom: 20px; } #poem_sentence { font-size: 25px; } #poem_info { font-size: 15px; margin: 15px auto; }