poj 3229 The Best Travel Design ( 图论+状态压缩 )
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 1359 | Accepted: 340 |
Description

Input
x=y=len=kind=0 means end of the path explanation.
N=M=K=0 means end of the input.
Output
Sample Input
3 3 3
1 2 3
10 8 6
1 2 120 0
1 3 60 1
2 3 50 1
0 0 0 0
3 3 2
1 2 3
10 8 6
1 2 120 0
1 3 60 1
2 3 50 1
0 0 0 0
0 0 0
Sample Output
3
No Solution
Source
#include<cstdio>
#include<iostream>
#include<algorithm>
#define INF 1e9
using namespace std; double a[20],t;
double map[22][22];
double dp[20][1<<20];
int n,m; void init()
{
int i,j;
for(i=0;i<n;i++)
{
map[i][i]=0;
for(j=0;j<n;j++)
{
map[i][j]=INF;
}
for(j=0;j<(1<<n);j++) //所有状态下i为终点的用时都初始化为无穷大
{
dp[i][j]=INF;
}
}
}
void floyd()
{
int i,j,k;
for(k=0; k<n; k++) //k为i和j之间的点
{
for(i=0; i<n; i++)
{
if(i!=k&&map[i][k]<INF)
for(j=0; j<n; j++)
{
if(i!=j&&map[k][j]<INF)
{
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
}
}
}
}
} int main()
{
int res,cnt,tmp,ans,x,y,kind,len,i,j,k;
while(scanf("%d%d%lf",&n,&m,&t),(n||m||t))
{
res=0,ans=-1;
double day=t*12.0;
init();
for(i=1;i<=m;i++)
{
scanf("%d",&k);
res+=1<<(k-1); //res记录要访问的所有点的状态,便于之后对照。
}
for(i=0;i<n;i++)
scanf("%lf",&a[i]); //a[i]记录每个景点stay的用时
while(scanf("%d%d%d%d",&x,&y,&len,&kind),(x||y||len||kind))
{
x--,y--; //转化为以0为起点
double hour=len*1.0/(kind?120.0:80.0);
map[x][y]=min(hour,map[x][y]);
map[y][x]=min(hour,map[y][x]);
}
floyd();
for(i=1;i<n;i++)
dp[i][1<<i]=map[0][i]+a[i]; //初始化从起点直接到i的用时
for(j=0;j<(1<<n);j++) //枚举所有状态
{
for(i=0;i<n;i++) //在起点0和i之间取点k来更新最短用时,dp实现
{
if((j&(1<<i))&&j!=(1<<i)) //j状态包含0-->i的状态且不等于那个状态
{
for(k=0;k<n;k++)
{
if((j&(1<<k)&&i!=k&&j!=(1<<k)))
dp[i][j]=min(dp[i][j],dp[k][j-(1<<i)]+map[k][i]+a[i]);
}
if(((j&res)==res)&&map[i][0]+dp[i][j]<=day) //如果j状态包含res记录的状态且用时小于等于限定的时间
{
tmp=j;
cnt=0;
while(tmp) //j状态每一位的状态进行遍历
{
if(tmp%2) cnt++; //为1的位则cnt++
tmp=tmp>>1;
}
ans=max(cnt,ans); //更新最大值
//printf("test: %d\n",ans);
}
}
}
}
if(ans>=0)
printf("%d\n",ans);
else printf("No Solution\n");
}
return 0;
} //391MS
poj 3229 The Best Travel Design ( 图论+状态压缩 )的更多相关文章
- poj 3311 Hie with the Pie(状态压缩dp)
Description The Pizazz Pizzeria prides itself or more (up to ) orders to be processed before he star ...
- POJ 1185 炮兵阵地(经典的状态压缩DP)
题意:中文题. 思路,经典的状态压缩题目. 由于列长比较小,我们可以以行为阶段用状态压缩来做. 由于攻击只占两个格,这样从行的角度看,第i行的炮兵只与前i-1和前i-2行有关系.这样如果用j,k,l分 ...
- POJ 3311 Hie with the Pie(Floyd+状态压缩DP)
题是看了这位的博客之后理解的,只不过我是又加了点简单的注释. 链接:http://blog.csdn.net/chinaczy/article/details/5890768 我还加了一些注释代码,对 ...
- poj 1753 Flip Game 枚举(bfs+状态压缩)
题目:http://poj.org/problem?id=1753 因为粗心错了好多次……,尤其是把1<<15当成了65535: 参考博客:http://www.cnblogs.com/k ...
- poj 2777 Count Color(线段树、状态压缩、位运算)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 38921 Accepted: 11696 Des ...
- POJ 2046 Gap 搜索- 状态压缩
题目地址: http://poj.org/problem?id=2046 一道搜索状态压缩的题目,关键是怎样hash. AC代码: #include <iostream> #include ...
- poj2443(简单的状态压缩)
POJ2443 Set Operation Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2679 Accepted: ...
- poj 3311 floyd+dfs或状态压缩dp 两种方法
Hie with the Pie Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6436 Accepted: 3470 ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
随机推荐
- 在Global.asax文件里实现通用防SQL注入漏洞程序(适应于post/get请求)
可使用Global.asax中的Application_BeginRequest(object sender, EventArgs e)事件来实现表单或者URL提交数据的获取,获取后传给SQLInje ...
- 自定义android精美聊天界面
编写精美聊天界面,那就肯定要有收到的消息和发送的消息. 首先还是编写主界面,修改activity_chat.xml中的代码,如下所示: <?xml version="1.0" ...
- MySQL无法登录服务器解决方法
提示:#2000 无法登录 MySQL 服务器 今天用本机装了个phpMyAdmin,版本3.4.8,想用它来连一台内网服务器上的Mysql,于是乎修改phpMyAdmin配置文件config.inc ...
- PHP MySQL 读取数据
PHP MySQL 读取数据 从 MySQL 数据库读取数据 SELECT 语句用于从数据表中读取数据: SELECT column_name(s) FROM table_name 如需学习更多关于 ...
- ASP.NET菜鸟之路之Request小例子
背景 我是一个ASP.NET菜鸟,暂时开始学习ASP.NET,在此记录下我个人敲的代码,没有多少参考价值,请看到的盆友们为我点个赞支持我一下,多谢了. Request获取值 Request获取值有两种 ...
- Delphi 动态改变Rzsplitter的Orientation(方向)属性
效果图: 原先不知道,弄了半天都改不了RzSplitter.Orientation = orHorizontal / orVertical 然后去查该组件的源代码,原来Orientation不是在Rz ...
- 【NEERC 2003】有向图破坏
[题目描述] Alice和Bob正在玩如下的游戏.首先Alice画一个有N个顶点,M条边的有向图.然后Bob试着摧毁它.在一次操作中他可以找到图中的一个点,并且删除它所有的入边或所有的出边. Alic ...
- 解析一下rtmp协议比较难懂的地方
官方文档写的过于复杂,这里弄个简单的好入门的.chunk 分基础头,消息头,时间戳,数据部分基础头中第一个字节最高位的两个位是用来设置消息头的四种格式的,和基础头没关系,整个基础头有3个字段的长度存储 ...
- shell每日发邮件
LOGFILE="$fank/"`date +"%Y%m%d"`"data"#每日文件 from="abc@123.com&quo ...
- C盘不能新建文件的问题解决办法
C盘不能新建文件的问题解决办法 主要症状: 1.C 盘文件不能修改2.C 盘不能新建文件3.总之就是只能读取不能,写入和修改这样对于平时操作造成了极其的不方便~~~复制文件到C 盘会提示:错误0×80 ...