結果
問題 | No.134 走れ!サブロー君 |
ユーザー |
|
提出日時 | 2015-01-23 00:37:59 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 27 ms / 5,000 ms |
コード長 | 1,645 bytes |
コンパイル時間 | 1,372 ms |
コンパイル使用メモリ | 160,500 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-14 17:11:37 |
合計ジャッジ時間 | 2,015 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 15 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define all(c) (c).begin(),(c).end()#define rrep(i,n) for(int i=(int)(n)-1;i>=0;i--)#define REP(i,m,n) for(int i=(int)(m);i<(int)(n);i++)#define rep(i,n) REP(i,0,n)#define iter(c) __typeof((c).begin())#define tr(it,c) for(iter(c) it=(c).begin();it!=(c).end();it++)#define pb(a) push_back(a)#define pr(a) cout<<(a)<<endl#define PR(a,b) cout<<(a)<<" "<<(b)<<endl#define R cin>>#define F first#define S second#define ll long longbool check(int n,int m,int x,int y){return (x<0||x>=n||y<0||y>=m)?false:true;}const ll MAX=1000000007,MAXL=1LL<<60,dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};typedef pair<int,int> P;typedef pair<P,double> P2;double D(int x1, int y1, int x2, int y2) {return abs(x1-x2)+abs(y1-y2);}double T(double w) {return (w+100.0)/120.0;}int main() {int xx,yy,n;cin >> xx >> yy >> n;P2 a[n+1];double sum=0;for(int i=0; i<n; i++) {cin >> a[i].F.F >> a[i].F.S >> a[i].S;sum+=a[i].S;}a[n].F.F=xx;a[n].F.S=yy;a[n].S=0;double dp[(1<<(n+1))][n+1];fill(dp[0],dp[(1<<(n+1))],MAXL);for(int i=0; i<n; i++) {double d=D(xx,yy,a[i].F.F,a[i].F.S);dp[(1<<i)][i]=d*T(sum)+a[i].S;}for(int t=1; t<(1<<(n+1)); t++) {for(int j=0; j<=n; j++) {if(!(t&(1<<j))) continue;if(dp[t][j]==MAXL) continue;for(int i=0; i<=n; i++) {if(t&(1<<i)) continue;double ww=sum;for(int k=0; k<n; k++) {if(t&(1<<k)) ww-=a[k].S;}double d=D(a[j].F.F,a[j].F.S,a[i].F.F,a[i].F.S);dp[t|(1<<i)][i]=min(dp[t|(1<<i)][i],dp[t][j]+d*T(ww)+a[i].S);}}}printf("%.10f\n",dp[(1<<(n+1))-1][n]);return 0;}