dp[ i ]表示该状态下得所需花费。

 /*
状态压缩dp
dp[i] = min( dp[ i-j ]+cost[ j ] );
由i-j的状态转到i的状态
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
using namespace std;
const int maxn = ;
const double inf = 99999999.0;
const int maxm = (<<);
const double eps = 1e-;
struct node{
double x,y;
}dot[ maxn ];
double dp[ maxm ];
double dis[ maxn ][ maxn ];
double dist( int i,int j ){
return sqrt( ( dot[i].x-dot[j].x )*( dot[i].x-dot[j].x )+( dot[i].y-dot[j].y )*( dot[i].y-dot[j].y ) );
}
int main(){
int n;
while( scanf("%d",&n),n ){
int sum,cnt,flag;
cnt = ;
sum = ;
for( int i=;i<n;i++ ){
scanf("%lf%lf%d",&dot[i].x,&dot[i].y,&flag);
if( flag== ){
sum += (<<i);
cnt++;
}
}
if(( n>&&cnt< )||( n==&&cnt== )){
printf("No Solution\n");
continue;
}
for( int i=;i<n;i++ )
for( int j=;j<n;j++ )
dis[ i ][ j ] = dist( i,j );
int N = (<<n);
for( int i=;i<N;i++ )
dp[ i ] = inf;
dp[ sum ] = 0.0;
for( int i=sum;i<N;i++ ){
if( dp[i]>inf ) continue;
for( int j=;j<n;j++ ){
if( i&(<<j) )//j是固定的
continue;
double min1 = inf;
double min2 = inf;
for( int k=;k<n;k++ ){//找出min1,min2
if( i&(<<k) ){
if( min1>dis[ j ][ k ] ){
min2 = min1;
min1 = dis[ j ][ k ];
}
else if( min2>dis[ j ][ k ] ){
min2 = dis[ j ][ k ];
}
}
}
dp[ i|(<<j) ] = min( dp[ i|(<<j) ],dp[i]+min1+min2 );
}
}
printf("%.6lf\n",dp[ N- ]);
}
return ;
}

HDU3362+状态压缩的更多相关文章

  1. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  2. HDU 3605:Escape(最大流+状态压缩)

    http://acm.hdu.edu.cn/showproblem.php?pid=3605 题意:有n个人要去到m个星球上,这n个人每个人对m个星球有一个选择,即愿不愿意去,"Y" ...

  3. [HDU 4336] Card Collector (状态压缩概率dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题目大意:有n种卡片,需要吃零食收集,打开零食,出现第i种卡片的概率是p[i],也有可能不出现卡 ...

  4. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  5. codeforces B - Preparing Olympiad(dfs或者状态压缩枚举)

    B. Preparing Olympiad You have n problems. You have estimated the difficulty of the i-th one as inte ...

  6. NOIP2005过河[DP 状态压缩]

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  7. vijos1426兴奋剂检查(多维费用的背包问题+状态压缩+hash)

    背景 北京奥运会开幕了,这是中国人的骄傲和自豪,中国健儿在运动场上已经创造了一个又一个辉煌,super pig也不例外……………… 描述 虽然兴奋剂是奥运会及其他重要比赛的禁药,是禁止服用的.但是运动 ...

  8. hoj2662 状态压缩dp

    Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M S ...

  9. poj3254 状态压缩dp

    题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法.     分析:假如我们知道第 i-1 行的所有的可以放的情况,那么对于 ...

随机推荐

  1. Java——String.split()函数

    在java doc里有 String[] java.lang.String.split(String regex) Splits this string around matches of the g ...

  2. C++实现元组

    一般我们使用struct时需要在头文件中定义,例如 struct Example { int a; char b; ... }; 这样将数据打包好必须在程序运行之前将其定义好,如果有需求在程序运行时添 ...

  3. python备份脚本

    备份制定文件到指定目录下,文件名以当前时间 思路: 1.指定备份的文件或目录 2.指定备份的目标路径 3.压缩备份名是当前日期和时间 4.使用标准的压缩命令 1.最简单的以日期时间为文件名 2.以日期 ...

  4. selinux理解1-selinux介绍

    安全增强式Linux(SELinux, Security-Enhanced Linux)是一种强制访问控制(mandatory access control)的实现.它的作法是以最小权限原则(prin ...

  5. 第三篇、CSS样式简介

    <!--1.行内样式 <p style="background-color:red;font-size:20px"> --> <!--2.页内样式 & ...

  6. NodeJS连接MongoDB数据库时报错

    今天第一次尝试连接MongoDB数据库,具体步骤也很简单. 首先,通过NodeJS运行环境安装MongoDB包,进入要安装的目录,执行语句 npm install mongodb 安装成功后,通过如下 ...

  7. Java多线程同步代码块

    /*多线程的安全问题1.为什么会出现安全问题?因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候, ...

  8. Pigcms中WeixinAction的简略版流程

    if $this->ali = 0; 1.new wechat() //该类存于PigCms/lib/ORG/Wechat.class.php 2.list($content,$type) = ...

  9. Swift 学习笔记1

    最近在看Swift,努力在看相关的文档以及书籍,因为Swift3.0的更新,以及它开源了,所以打算写一些关于Swift的相关文章.让Swift能够更好的被我理解

  10. Git 安装与使用(一)

    一.简介 1.集中式版本控制系统(CVS):Svn     * 版本库是集中存放在中央服务器中的,客户端需要先从中央服务器取得最新的版本,然后再干活,活干完后,再把自己的代码推送给中央服务器.    ...