poj 3229 The Best Travel Design ( 图论+状态压缩 )
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 1359 | Accepted: 340 |
Description
Dou Nai is an excellent ACM programmer, and he felt so tired recently that he wants to release himself from the hard work. He plans a travel to Xin Jiang .With the influence of literature, he wishes to visit Tian Chi, Da Ban Town, Lou Lan mysterious town , Yi Li , and other sights that also have great attraction to him. But the summer vocation time is not long. He must come back before the end of the summer vocation. For visiting more sights and all the necessary sights, he should make a thorough plan. Unfortunately, he is too tired to move, so you must help him to make this plan. Here are some prerequisites: there are two ways of transportation, bus and train, and velocity of the bus is 120km/h and the train is 80km/h. Suppose the travel is started from Urumuqi (point 1), and the end of the travel route is Urumuqi too. You need to spend some time to visit the sights, but the time of each visit is not always equal. Suppose we spend 12 hours on traveling every day.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 ...
随机推荐
- Oracle oerr使用
[oracle@cuug ~]$ oerr ora 01555 01555, 00000, "snapshot too old: rollback segment number %s wit ...
- PLSQL远程连接到Oracle服务器
这里只介绍一种远程连接服务器方法,即本机安装了Oracle客户端和PLSql工具,服务器安装在虚拟机或者另一台电脑上 1.打开Oracle客户端的Net Manager,选择Oracle Net配置— ...
- Android入门随记
1.Activity是通过startActivity()开始的,结束后不反回任何结果,而用startActivityForResult(Intent intent, int resquestCode) ...
- Cookie、LocalStorge、SesstionStorge 的区别和用法
前言 总括:详细讲述Cookie.LocalStorge.SesstionStorge的区别和用法. 1. 各种存储方案的简单对比 Cookies:浏览器均支持,容量为4KB UserData:仅IE ...
- Spring4.0学习笔记(6) —— 通过工厂方法配置Bean
1.静态工厂方法: bean package com.spring.factory; public class Car { public Car(String brand) { this.brand ...
- 无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。
无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满.请删除不需要的文件.删除文件组中的对象.将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘 ...
- django+nginx+supervisor+gunicorn+gevent 网站部署
django+nginx+supervisor+gunicorn+gevent 网站部署 django,nginx,supervisor,gunicorn,gevent这几个都是在本领域大名鼎鼎的软件 ...
- HDU1465 第六周L题(错排组合数)
L - 计数,排列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- Scut 进阶:Schema 自动检测
Scut 在启动时有一个自动根据代码中数据类型检查数据库字段的功能,要如何使用呢? 脚本引擎动态加载 ModelAssembly: ScriptEngine.cs - InitScriptRuntim ...
- spring mvc标准项目结构
src com.xxx.inews.dao com.xxx.inews.dao.impl com.xxx.inews.data.entity com.xxx.inews.data.vo com.xxx ...