LightOJ1316 A Wedding Party(状压DP)
这题事实上只需要关心15个商店和一个起点一个终点,预处理出这几个点之间的最短距离。Floyd会超时,用Dijkstra即可。
然后就是dp[u][S]表示已经经过商店集合S且当前在第u个商店所花的最少时间。
最后的结果是找到所有dp[u][S]有解且u能到达终点的最大的|S|,而最短时间就是dp[u][S]+dist[u][vt]。
细节还挺多的。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF (1<<29) int d[][<<];
int G[][],dist[][],shop[];
void dijkstra(int vs,int n){
for(int i=; i<n; ++i) dist[vs][i]=INF;
dist[vs][vs]=;
bool vis[]={};
for(int i=; i<n; ++i){
int u=-,mm=INF;
for(int v=; v<n; ++v){
if(!vis[v] && mm>dist[vs][v]){
mm=dist[vs][v];
u=v;
}
}
if(u==-) break;
vis[u]=;
for(int v=; v<n; ++v){
if(!vis[v] && G[u][v]!=INF && dist[vs][v]>dist[vs][u]+G[u][v]){
dist[vs][v]=dist[vs][u]+G[u][v];
}
}
}
}
int getCnt(int s){
int res=;
for(int i=; i<; ++i){
if((s>>i)&) ++res;
}
return res;
}
int cnt[<<];
int main(){
for(int i=; i<(<<); ++i) cnt[i]=getCnt(i);
int t,n,m,s,a,b,c;
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%d%d%d",&n,&m,&s);
for(int i=; i<n; ++i){
for(int j=; j<n; ++j) G[i][j]=INF;
}
for(int i=; i<s; ++i) scanf("%d",&shop[i]);
while(m--){
scanf("%d%d%d",&a,&b,&c);
G[a][b]=min(G[a][b],c);
}
dijkstra(,n);
for(int i=; i<s; ++i) dijkstra(shop[i],n); if(dist[][n-]==INF){
printf("Case %d: Impossible\n",cse);
continue;
} for(int i=; i<s; ++i){
for(int j=; j<(<<s); ++j) d[i][j]=INF;
}
for(int i=; i<s; ++i){
d[i][<<i]=dist[][shop[i]];
}
for(int i=; i<(<<s); ++i){
for(int j=; j<s; ++j){
if(((i>>j)&)==) continue;
for(int k=; k<s; ++k){
if(k==j || ((i>>k)&)==) continue;
d[j][i]=min(d[j][i],d[k][i^(<<j)]+dist[shop[k]][shop[j]]);
}
}
}
int mx=,mm=INF;
for(int i=; i<(<<s); ++i){
for(int j=; j<s; ++j){
if(d[j][i]==INF || dist[shop[j]][n-]==INF) continue;
mx=max(mx,cnt[i]);
}
}
for(int i=; i<(<<s); ++i){
for(int j=; j<s; ++j){
if(d[j][i]==INF) continue;
if(cnt[i]==mx) mm=min(mm,d[j][i]+dist[shop[j]][n-]);
}
}
if(mm!=INF) printf("Case %d: %d %d\n",cse,mx,mm);
else printf("Case %d: 0 %d\n",cse,dist[][n-]);
}
return ;
}
LightOJ1316 A Wedding Party(状压DP)的更多相关文章
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
- 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP
[BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
- 【BZOJ1087】 [SCOI2005]互不侵犯King 状压DP
经典状压DP. f[i][j][k]=sum(f[i-1][j-cnt[k]][k]); cnt[i]放置情况为i时的国王数量 前I行放置情况为k时国王数量为J #include <iostre ...
随机推荐
- Slider插件(滑动条,拉链)
Slider插件(滑动条,拉链) 下载地址:http://files.cnblogs.com/elves/Slider.rar 提示:微软AJAX插件中也带此效果!
- 【Python】Python XML 读写
class ACTIVE_FILE_PROTECT_RULE_VIEW(APIView): renderer_classes = (JSONRenderer, BrowsableAPIRenderer ...
- 【云计算】Docker云平台—Docker基础
Docker云平台系列共三讲,此为第一讲:Docker基础 参考资料: Docker官方文档:https://docs.docker.com/ Docker从入门到实践:https://yeasy.g ...
- ENGINE=InnoDB
最开始用MySQL Administrator建数据库的时候,表缺省是InnoDB类型,也就没有在意.后来用Access2MySQL导数据的时候发现只能导成 MyISAM类型的表 区别如下原来是MyI ...
- JAVA 中BIO,NIO,AIO的理解
[转自]http://qindongliang.iteye.com/blog/2018539 ?????????????????????在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解 ...
- iOS 中添加lib型target库的依赖问题
今天在编码时遇到一个问题,总提示我找不到系统库文件. 我的项目结构类似下图 在TestLib中有引用CoreLocation库的类.但是CoreLocation库需要加在PhotoInfoDemo对象 ...
- codeforces A. New Year Candles 解题报告
题目链接:http://codeforces.com/problemset/problem/379/A 题目意思:给定a支蜡烛(每支蜡烛可以燃烧1小时),可以在燃尽的a支蜡烛中看能组成多少组b支蜡烛, ...
- [MAC] SVN lock的使用
转载 : http://www.eefocus.com/czzheng/blog/12-03/245532_4ca94.html 如果压根没有锁lock,那么每个人都拥有一个本地copy,每个人都能自 ...
- loadingDialog
1.dialog布局 dialog_loading.xml <?xml version="1.0" encoding="utf-8"?> <L ...
- 全排列(next_permutation)
next_permutation函数既可用于非重排列也可用于重排列: #include <bits/stdc++.h> #define MAXN 200000+10 #define ll ...