結果
問題 | No.134 走れ!サブロー君 |
ユーザー |
![]() |
提出日時 | 2015-01-23 00:37:17 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 36 ms / 5,000 ms |
コード長 | 1,756 bytes |
コンパイル時間 | 672 ms |
コンパイル使用メモリ | 88,980 KB |
実行使用メモリ | 5,504 KB |
最終ジャッジ日時 | 2024-10-14 17:11:35 |
合計ジャッジ時間 | 1,361 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 15 |
ソースコード
#include<iostream>#include<string>#include<map>#include<vector>#include<list>#include<queue>#include<stack>#include<deque>#include<set>#include<bitset>#include<functional>#include<utility>#include<iterator>#include<algorithm>#include<sstream>#include<fstream>#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<cstring>#include<iomanip>using namespace std;#define len(val) static_cast<int>(val.size())#define rep(i, N) for(int i=0; i<N; i++)typedef long long ll;typedef pair<int, int> P;const int MAXN = 14;int sx, sy;int n;int xs[MAXN], ys[MAXN];double wss[MAXN];double wsum = 0;double dp[1 << MAXN][MAXN];double d[MAXN][MAXN];const int INF = 1e9;double dfs(int s, int v){if(dp[s][v] >= 0) return dp[s][v];if(s == (1<<n)-1 && v == 0){return dp[s][v] = 0;}double res = INF;for(int u=0; u<n; u++){if(!(s>>u & 1)){double wes = wsum;for(int i=0; i<n; i++){if(s>>i & 1) wes -= wss[i];}res = min(res, dfs(s|1<<u, u)+(double)d[v][u]*(double)(wes+100)/120 + wss[u]);}}return dp[s][v] = res;}int main(){cin.tie(0);ios::sync_with_stdio(false);cin >> sx >> sy;cin >> n;rep(i, n+1){if(i == 0){xs[i] = sx; ys[i] = sy; wss[i] = 0;continue;}cin >> xs[i] >> ys[i] >> wss[i];wsum += wss[i];}n++;rep(i, n){rep(j, n){if(i == j){d[i][j] = INF;}else{d[i][j] = abs(xs[i]-xs[j])+abs(ys[i]-ys[j]);}}}memset(dp, -1, sizeof(dp));cout << setprecision(8) << dfs(0, 0) << endl;}