poj 2253(區間DP)
阿新 • • 發佈:2019-02-01
思路:求所有路徑中最大跳躍距離的最小值, 很詭異的是輸出答案如果用G++,.3lf%格式會出錯,c++可以過
#include<cstdio> #include<cmath> #include<vector> #include<iostream> #include<stack> #include<cstring> using namespace std; const double INF=0x3f3f3f3f; const int maxn=2e2+10; double mp[maxn][maxn], dis[maxn][maxn], cor[maxn][maxn]; int n; int main(){ int cas=0; while(~scanf("%d", &n) && n) { for(int i=1; i<=n; i++) { scanf("%lf%lf", &cor[i][0], &cor[i][1]); //cout<<cor[i][0]<<" "<<cor[i][1]<<endl; } for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { double x2, y2; x2=(cor[i][0]-cor[j][0])*(cor[i][0]-cor[j][0]); y2=(cor[i][1]-cor[j][1])*(cor[i][1]-cor[j][1]); dis[i][j]=mp[i][j]=sqrt(x2 + y2); //cout<<mp[i][j]<<" "; } //cout<<endl; } for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) dis[i][j]=min(dis[i][j], max(dis[i][k], dis[k][j])); printf("Scenario #%d\n", ++cas); printf("Frog Distance = %.3lf\n\n", dis[1][2]); } return 0; }