Uva1347

来源:互联网 发布:网络电影会给独立账号 编辑:程序博客网 时间:2024/05/22 08:08

状态转移方程已验证?

#include<cctype>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<queue>#include<stack>#include<set>#include<map>using namespace std;typedef long long LL;const int maxn=2e3;const int inf=9999999;int x[maxn],y[maxn];float d[maxn];int n;void init();void dp();void outp();float dist(int a,int b){    return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));}int main(){    while (~scanf("%d",&n))        {            init();            dp();            outp();        }    return 0;}void dp(){    for(int i=1;i<n;i++)    {        for(int j=1;j<i;j++)        {            d[i+1,j]=min(d[i+1,j],d[i,j]+dist(i,i+1));            d[i+1,i]=min(d[i+1,i],d[i,j]+dist(i,i+1)+dist(j,i));        }    }    for(int j=1;j<n;j++)        d[n-1,j]=min(d[n-1,j],dist(n-1,n)+dist(j,n));}void init(){    for(int i=1;i<=n;i++)        scanf("%d%d",&x[i],&y[i]);    for(int i=1;i<maxn;i++)        for(int j=1;j<maxn;j++)            d[i,j]=inf;}void outp(){    printf("%.2f\n",d[n,n-1]);}


0 0
原创粉丝点击