POJ2686--Travelling by Stagecoach
분석:상압DP.상태: dp[S][v], 도시 v에 도착하고 남은 차표의 집합이 S일 때의 가장 짧은 시간
상태 전이 방정식: dp[S&~(1<코드:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1111;
double dp[maxn][35];
int g[35][35];
int t[10];
int n, m, p, a, b;
int main() {
while(scanf("%d%d%d%d%d", &n, &m, &p, &a, &b) && n != 0 && m != 0) {
for(int i = 0; i < n; i++)
scanf("%d", &t[i]);
for(int i = 0; i < m; i++)
memset(g[i], -1, sizeof(g[i]));
for(int i = 0; i < p; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
u--, v--;
g[u][v] = w;
g[v][u] = w;
}
for(int i = 0; i < 1<<n; i++)
fill(dp[i], dp[i]+m, 100000000.0);
dp[(1<<n)-1][a-1] = 0.0;
double ans = 100000000.0;
for(int S = (1<<n) -1; S >= 0; S--) {
ans = min(ans, dp[S][b-1]);
for(int v = 0; v < m; v++) {
for(int i = 0; i < n; i++) {
if(S>>i & 1) {
for(int u = 0; u < m; u++) {
if(g[v][u] >= 0) {
// i, v u
dp[S & ~(1<<i)][u] = min(dp[S & ~(1<<i)][u], dp[S][v] + g[v][u]*1.0/t[i]);
}
}
}
}
}
}
if(ans != 100000000.0) printf("%.3f
", ans);
else printf("Impossible
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.