hdu 4114 Disney's FastPass(最短路+状态压缩)
Disney's FastPass
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2336 Accepted Submission(s):
644
Disney's FastPass is a virtual queuing system
created by the Walt Disney Company. First introduced in 1999 (thugh the idea of
a ride reservation system was first introduced in world fairs), Fast-Pass allows
guests to avoid long lines at the attractions on which the system is installed,
freeing them to enjoy other attractions during their wait. The service is
available at no additional charge to all park guests.
---
wikipedia

Disneyland is a large theme park
with plenties of entertainment facilities, also with a large number of tourists.
Normally, you need to wait for a long time before geting the chance to enjoy any
of the attractions. The FastPass is a system allowing you to pick up
FastPass-tickets in some specific position, and use them at the corresponding
facility to avoid long lines. With the help of the FastPass System, one can
arrange his/her trip more efficiently.
You are given the map of the whole
park, and there are some attractions that you are interested in. How to visit
all the interested attractions within the shortest time?
indicating the number of test cases.
Each test case contains several
lines.
The first line contains three integers N,M,K(1 <= N <= 50; 0
<= M <= N(N - 1)/2; 0 <= K <= 8), indicating the number of
locations(starting with 1, and 1 is the only gate of the park where the trip
must be started and ended), the number of roads and the number of interested
attractions.
The following M lines each contains three integers A,B,D(1 <=
A,B <= N; 0 <= D <= 10^4) which means it takes D minutes to travel
between location A and location B.
The following K lines each contains
several integers Pi, Ti, FTi,Ni,
Fi,1, Fi,2 ... Fi,Ni-1, FiNi ,(1
<= Pi,Ni, Fi,j <=N, 0 <=
FTi <= Ti <= 10^4), which means the ith interested
araction is placed at location Pi and there are Ni locations Fi,1;
Fi,2 ... Fi,Ni where you can get the FastPass
for the ith attraction. If you come to the ith attraction with its FastPass, you
need to wait for only FTi minutes, otherwise you need to wait for Ti
minutes.
You can assume that all the locations are connected and there is at
most one road between any two locations.
Note that there might be several
attrractions at one location.
#X: Y", where X is the test case number (starting with 1) and Y is the minimum
time of the trip.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#define INF 0x3f3f3f3f
#define M
#define N 60
using namespace std;
int n,m,k,ans;
int map[N][N];
int p[N],t[N],ft[N],pass[N];
int dp[<<][<<][N]; void floyd()
{
int i,j,k;
for(k=; k<=n; k++)
for(i=; i<=n; i++)
for(j=; j<=n; j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
} void Get_Dp()
{
int i,j,u,v;
for(i=; i<=(<<k); i++)
for(j=; j<=(<<k); j++)
for(u=; u<=n; u++)
dp[i][j][u]=INF;
dp[][][]=;
for(int state1=; state1<(<<k); state1++)
{
for(int state2=; state2<(<<k); state2++)
{
for(u=; u<=n; u++)
{
if(dp[state1][state2][u]<INF)
{
for(i=; i<k; i++)
{
if(!(state1&(<<i))) ///单独取state1的每一位数字
{
int cost=map[u][p[i]];
if((state2&(<<i))) cost+=ft[i];
else cost+=t[i];
dp[state1|(<<i)][state2|pass[p[i]]][p[i]]=min(dp[state1|(<<i)][state2|pass[p[i]]][p[i]],dp[state1][state2][u]+cost);
}
}
for(v=; v<=n; v++)
{
dp[state1][state2|pass[v]][v]=min(dp[state1][state2|pass[v]][v],dp[state1][state2][u]+map[u][v]);
}
}
}
}
}
ans=INF;
for(i=; i<(<<k); i++)
ans=min(ans,dp[(<<k)-][i][]);
} int main()
{
int i,j,T,cas,num,v;
scanf("%d",&T);
for(cas=; cas<=T; cas++)
{
scanf("%d%d%d",&n,&m,&k);
for(i=; i<=n; i++)
for(j=; j<=n; j++)
if(i==j) map[i][j]=;
else map[i][j]=INF;
int a,b,c;
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]>c)
map[a][b]=c,map[b][a]=c;
}
floyd();
memset(pass,,sizeof(pass));
for(i=; i<k; i++)
{
scanf("%d%d%d%d",&p[i],&t[i],&ft[i],&num);
while(num--)
{
scanf("%d",&v);
pass[v]|=(<<i); ///没有进位的加法
}
}
Get_Dp();
printf("Case #%d: %d\n",cas,ans);
}
return ;
}
hdu 4114 Disney's FastPass(最短路+状态压缩)的更多相关文章
- hdu 4114 Disney's FastPass 状压dp
Disney's FastPass Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.ph ...
- [hdu P4114] Disney's FastPass
[hdu P4114] Disney's FastPass Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 ...
- Light OJ 1316 A Wedding Party 最短路+状态压缩DP
题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...
- 最短路+状态压缩dp(旅行商问题)hdu-4568-Hunter
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4568 题目大意: 给一个矩阵 n*m (n m<=200),方格里如果是0~9表示通过它时要花 ...
- HDU 3605:Escape(最大流+状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=3605 题意:有n个人要去到m个星球上,这n个人每个人对m个星球有一个选择,即愿不愿意去,"Y" ...
- HDU 2809 God of War(DP + 状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 题目大意:给出战神吕布的初始攻击力ATI.防御力DEF.生命值HP.每升一级增加的攻击力In_A ...
- POJ 3311 Hie with the Pie (BFS+最短路+状态压缩)
题意:类似于TSP问题,只是每个点可以走多次,求回到起点的最短距离(起点为点0). 分析:状态压缩,先预处理各点之间的最短路,然后sum[i][buff]表示在i点,状态为buff时所耗时...... ...
- hdu 4352 XHXJ's LIS 数位dp+状态压缩
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others ...
- hdu - 1429 胜利大逃亡(续) (bfs状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=1429 终于开始能够做状态压缩的题了,虽然这只是状态压缩里面一道很简单的题. 状态压缩就是用二进制的思想来表示状态 ...
随机推荐
- 学习Python笔记---操作列表
1.for循环: 编写for循环时,对于用语存储列表中每个值的临时变量,可指定任何名称. 在for循环中,想包含多少行代码都可以,每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次. ...
- eclipse svn提交忽略文件及文件夹,ignore设置无效..
如果之前提交过此文件,就不能设置忽略该文件了.所以第一次提交的时候要搞清楚再提交. [亲测,的确如此,用 Windows -> Preferences -> Team -> Igno ...
- hdu 1296 Polynomial Problem(多项式模拟)
Problem Description We have learned how to obtain the value of a polynomial when we were a middle sc ...
- PHP 学习1.1
1 链接mysql 数据简单测试 <html><head> <title></title> <meta http-equiv="Co ...
- sublime3安装javascript控制台环境 方法2
1.下载node.js sublimeText3- 安装nodejs插件 ctrl+shift+p — install package —nodejs 2.修改配置文件 在 Sublie Text ...
- hdu 4722 Good Numbers( 数位dp入门)
Good Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- AutoDesk产品,Maya 2018 安装,Microsoft Visual C++ 2012 安装失败,结果 = -2147024546,安装Microsoft Visual C++ 2012 Redistributable 错误0x80070005 等等
今日老弟装Maya 2018出现问题,我帮忙解决了一下问题,过程颇为曲折,记录一下,看能否帮到有类似困惑的朋友. 我和老弟的电脑牌子一样,就现在自己电脑上装了,竟然开始和他的错误是一样的!都是Micr ...
- C++学习笔记(2)---2.5 C++函数编译原理和成员函数的实现
转载自:http://c.biancheng.NET/cpp/biancheng/view/2996.html点击打开链接 从上节的例子可以看出,对象的内存模型中只保留了成员变量,除此之外没有任何其他 ...
- 学习笔记(3)---安装SVM问题及解决方法
1. LibSVM下载,安装 下载地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/,最新的版本是3.17 2. 入门 [heart_scale_label,he ...
- JDK的KEYTOOL的应用,以及签署文件的应用(原创)
首先,我是这样的情况下学到这部分知识的: 我们公司同事把自己的unity生成的APK包查出MD5值直接拿出去微信那边申请,当然这样本来是没毛病,毕竟当时只有他一个人开发这个游戏, 然而我们几个前端过去 ...