• hrbustoj 2130 一笔画(状态压缩)


      基础状态压缩 转移方程为

     dp[j][i] = min(dp[j][i],dp[k][i^(1<<j)] + dis[k][j]);
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    double dp[16][1<<16];
    double x[16],y[16];
    double dis[16][16];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
            for(int i = 0;i < n;i++)
                scanf("%lf%lf",&x[i],&y[i]);
            for(int i = 0;i < n;i++)
                for(int j = 0;j < n;j++)
                dis[i][j] = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
            for(int i = 0;i < n;i++)
            {
                dp[i][0] = 0;
                for(int j = 1;j < (1<<n);j++)
                    dp[i][j] = 99999999;
            }
            for(int i = 0;i < n;i++)
                dp[i][1<<i] = 0;
            for(int i = 0;i < (1<<n);i++)
            {
                for(int j = 0;j < n;j++)
                {
                    for(int k = 0;k < n;k++)
                    {
                        if( (1<<j)&i && (1<<k)&i && j != k)
                        dp[j][i] = min(dp[j][i],dp[k][i^(1<<j)] + dis[k][j]);
                    }
                }
            }
            double Min = 99999999.0;
            for(int i = 0;i < n;i++)
            {
                if(dp[i][(1<<n) -1] < Min)
                    Min = dp[i][(1<<n)-1];
            }
            printf("%.2lf
    ",Min);
        }
        return 0;
    }
  • 相关阅读:
    键盘移动小div(js原生)
    递归好理解,可是不好用啊
    jsonp
    闭包
    json
    来个小例子(ajax)
    ajax小demo
    制作H5响应式页面注意事项、微信二次分享
    Button按钮--inject与provide
    webpack基本打包配置流程
  • 原文地址:https://www.cnblogs.com/jifahu/p/5449029.html
Copyright © 2020-2023  润新知