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. h2database源码浅析:锁与MVCC

    Table Level Locking The database allows multiple concurrent connections to the same database. To mak ...

  2. 第五篇、HTML标签类型

    <!--1.块级标签 独占一行,可以设置高度和宽度 如:div p h ul li  -----display: none(隐藏标签) block(让行内标签变块级标签) inline(让块级标 ...

  3. 第零篇、HTML5简介

    1.什么是HTML5? 背景:互联网的快速兴起 1>网页5.0版本 2>2014年才定制HTML5标准 3>移动先行 2.为什么要使用HTML5? 1>跨平台(可以运行所有的浏 ...

  4. asp.net MVC URL路由入门指南

    asp.net MVC 的URL路由是一个非常强大的功能,而且有个优点:强大单不复杂.然而,目前我在网上看到的相关资料,却都仅仅提供一些示例,仅通过这些示例,初学者基本上不可能明白为什么要这么配置,更 ...

  5. 02两栈共享空间_DoubleStack--(栈与队列)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  6. oninput和onpropertychange

    时常会有监听输入框输入的场景,比如新浪微博的发微博输入框: 还有边输入边提示: 以及form表单边输入边验证,当内容为空提示或者改变输入框的样式达到提示效果. 在IE中是onpropertychang ...

  7. Mysql 流程控制

    流程控制 分支结构 if分支结构 语法:     if 条件then         -- 语句体     else         -- 缺省语句体     end if; 示例: 循环结构 whi ...

  8. 376. Wiggle Subsequence

    A sequence of numbers is called a wiggle sequence if the differences between successive numbers stri ...

  9. 九度OJ 1532 棋盘寻宝扩展 -- 动态规划【背包问题】

    题目地址:http://ac.jobdu.com/problem.php?pid=1532 题目描述: 现在有一个8*8的棋盘,上面放着64个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大 ...

  10. RabbitMQ RPC问题

    1.服务器端代码:https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/python/rpc_server.py 2.客户端代码:htt ...