题目来源:Light OJ 1316 1316 - A Wedding Party

题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路

思路:首先预处理每两点之前的最短路 然后仅仅考虑那些商店 个数小于15嘛 就是TSP问题 状态压缩DP搞一下 状态压缩姿势不正确 有必要加强

#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
const int maxn = 510;
const int maxm = 16;
const int INF = 999999999;
struct edge
{
int u, v, w;
edge(){}
edge(int u, int v, int w): u(u), v(v), w(w) {}
}; struct HeapNode
{
int u, dis;
HeapNode(){};
HeapNode(int u, int dis): u(u), dis(dis){};
bool operator < (const HeapNode& rhs)const
{
return dis > rhs.dis;
}
};
vector <edge> G[maxn];
int d[maxn][maxn];
int dp[1<<maxm][maxm];
bool vis[maxn];
int n, m, t;
int a[maxm];
void Dijkstra(int s)
{
for(int i = 0; i <= n; i++)
d[s][i] = INF;
d[s][s] = 0;
memset(vis, false, sizeof(vis));
priority_queue <HeapNode> Q;
Q.push(HeapNode(s, 0));
while(!Q.empty())
{
HeapNode x = Q.top();
Q.pop();
int u = x.u;
if(vis[u])
continue;
vis[u] = true;
for(int i = 0; i < G[u].size(); i++)
{
edge e = G[u][i];
int v = e.v;
if(d[s][v] > x.dis + e.w)
{
d[s][v] = x.dis + e.w;
Q.push(HeapNode(v, d[s][v]));
}
}
}
}
int get(int x)
{
int ans = 0;
while(x)
{
if(x&1)
ans++;
x >>= 1;
}
return ans;
}
int main()
{
int T;
int cas = 0;
scanf("%d", &T);
while(T--)
{
scanf("%d %d %d", &n, &m, &t);
for(int i = 0; i <= n; i++)
G[i].clear();
for(int i = 0; i < t; i++)
{
int x;
scanf("%d", &x);
a[i] = x;
}
for(int i = 0; i < m; i++)
{
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
G[u].push_back(edge(u, v, w));
}
for(int i = 0; i < n; i++)
Dijkstra(i);
for(int s = 0; s < (1<<t); s++)
{
for(int i = 0; i < t; i++)
{
dp[s][i] = INF;
if(!(s&(1<<i)))
continue;
if(s == (1<<i))
{
//if(s == 2 && i == 1)
// printf("%d\n", d[0][a[i]]);
dp[s][i] = d[0][a[i]];
continue;
}
for(int j = 0; j < t; j++)
{
if((s&(1<<j)) && (i != j))
{
if(dp[s^(1<<i)][j] == INF)
continue;
if(d[a[j]][a[i]] == INF)
continue;
//if(s == 3 && i == 0)
// printf("%d %d %d %d\n", dp[s^(1<<i)][j], d[a[j]][a[i]], j, dp[2][1]);
dp[s][i] = min(dp[s^(1<<i)][j] + d[a[j]][a[i]], dp[s][i]);
}
} }
}
//printf("222*%d\n", dp[3][0]);
int x;
int ans = INF, sum = 0;
for(int s = 1; s < (1<<t); s++)
{ for(int i = 0; i < t; i++)
{
//if(s == (1<<i))
// printf("***%d %d %d\n", dp[s][i], i, s);
//printf("**%d %d %d %d\n", dp[s][i], s, i, dp[2][i]);
if(dp[s][i] == INF || d[a[i]][n-1] == INF)
continue;
int temp = get(s);
if(sum < temp || sum == temp && ans > dp[s][i]+d[a[i]][n-1])
{ sum = temp;
ans = dp[s][i]+d[a[i]][n-1];
x = s;
}
}
}
if(sum == 0)
{
printf("Case %d: Impossible\n", ++cas);
continue;
}
printf("Case %d: %d %d\n", ++cas, sum, ans);
}
return 0;
}

Light OJ 1316 A Wedding Party 最短路+状态压缩DP的更多相关文章

  1. 最短路+状态压缩dp(旅行商问题)hdu-4568-Hunter

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4568 题目大意: 给一个矩阵 n*m (n m<=200),方格里如果是0~9表示通过它时要花 ...

  2. Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖

    题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...

  3. POJ 3311 Hie with the Pie (BFS+最短路+状态压缩)

    题意:类似于TSP问题,只是每个点可以走多次,求回到起点的最短距离(起点为点0). 分析:状态压缩,先预处理各点之间的最短路,然后sum[i][buff]表示在i点,状态为buff时所耗时...... ...

  4. 2010辽宁省赛E(Bellman_Ford最短路,状态压缩DP【三进制】)

    #include<bits/stdc++.h>using namespace std;const int inf=0x3f3f3f3f;struct node{    int v,z,d, ...

  5. HDU Victor and World (最短路+状态压缩)

    题目链接:传送门 题意: n个城市m条路.刚開始在点1,求把每一个城市都遍历一边最后回到1的花费的最小值. 分析: ​​+n​2​​∗2​n​​). 转自Bestcode. 以下说说我的状态转移,首先 ...

  6. Light oj 1099 - Not the Best 次短路

    题目大意:求次短路. 题目思路:由于可能存在重边的情况所以不能采用邻接矩阵储存图,我用了邻接表来存图. 由起点S到终点E的次短路可能由以下情况组成: 1.S到v点的次短路 + v到E的距离 2.S到v ...

  7. Light OJ 1037 - Agent 47(预处理状态压缩DP)

    题目大意: 有个特工要执行任务,他会遭遇到最多15个目标,特工必须把他们全部杀死.当他杀死一个目标后他可以使用目标的武器来杀死其他人.因此他必须有一个杀人的顺序,使得他开枪的次数最小. 现在给你一个表 ...

  8. Light OJ 1021 - Painful Bases(状态压缩DP)

    题目大意: 给你一个base 进制的数字,把这个数字的每一位进行全排列,问有多少个数字是可以整除k的. 题目解析: #include<cstdio> #include<cstring ...

  9. light oj 1151 - Snakes and Ladders 高斯消元+概率DP

    思路: 在没有梯子与蛇的时候很容易想到如下公式: dp[i]=1+(∑dp[i+j])/6 但是现在有梯子和蛇也是一样的,初始化p[i]=i; 当有梯子或蛇时转移为p[a]=b; 这样方程变为: dp ...

随机推荐

  1. SQL Server 连接问题-TCP/IP

    原文:SQL Server 连接问题-TCP/IP 出自:http://blogs.msdn.com/b/apgcdsd/archive/2012/02/24/ms-sql-server-tcp-ip ...

  2. SQL Server审计功能入门:更改跟踪(Change Tracking)

    原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...

  3. ssis t-sql返回值

    原文:ssis t-sql返回值 sql类似如下,不需要使用return 语句,SQL语句的ConnectionType必须是"ADO.NET" select @proID=fie ...

  4. 终结者:具体解释Nginx(一)

            相信非常多人都听过Nginx.这个小巧的东西能够和Apache及IIS相媲美. 那么它有什么作用呢?一句话.它是一个减轻Web应用server(如Tomcat)压力和实现Web应用se ...

  5. 解决 Mybatis 元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id*,result*,association*,collection*,discriminat

    在配置 mybatis mapper.xml文件时, 一不小心就会报如下类似的异常: Caused by: org.springframework.beans.factory.BeanCreation ...

  6. JavaWeb框架的基石

    JavaWeb框架的基石(一) 初学JavaWeb开发,请远离各种框架,从Servlet开始.         Web框架是开发者在使用某种语言编写Web应用服务端是关于架构的最佳实践.很多Web框架 ...

  7. C#版的抓包软件

    C#版的抓包软件   [创建时间:2015-09-10 22:37:04] NetAnalyzer下载地址 不好意思啊,NetAnalyzer停更有点长了,今天继续填坑^&^ NetAnaly ...

  8. 关于在同一母版页中使用多个CSS文件的解决方案

    原文:关于在同一母版页中使用多个CSS文件的解决方案 以前都用.NET1.1没遇到这问题,现在换了2.0开始学着使用母版,结果就遇到了这个问题,在百度上一搜索才发现有不少人提出这个问题,但没找到好的解 ...

  9. HTC T328W刷机包 仿三星S5 UI美化 精简 S5落下

    ROM介绍 1.三星移植TouchWiz接口; 2.三星增加S4壁纸和图标美化; 3.正确ROM呈流线型; 4.正确ROM优化; 5.完成ROOT权限; 6.短信支持来信息亮屏功能(在短信设置里设置) ...

  10. 数据库文档生成工具——word2chm,SqlSpec

    首先使用代码生成器可以生成word版本的数据库文档. 转成chm格式的更加小巧和方便~ SqlSpec是个好工具,可以生成所有数据库相关的信息 之后可以一键生成chm文档.