1. #include<map>
  2. #include<set>
  3. #include<cmath>
  4. #include<queue>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<string>
  8. #include<cstdlib>
  9. #include<cstring>
  10. #include<iostream>
  11. #include<algorithm>
  12. #define Maxn 52
  13. #define Maxm 100010
  14. #define LL __int64
  15. #define Abs(x) ((x)>0?(x):(-x))
  16. #define lson(x) (x<<1)
  17. #define rson(x) (x<<1|1)
  18. #define inf 0x3f3f3f3f
  19. #define Mod 1000000007
  20. using namespace std;
  21. int dis[Maxn][Maxn],p[Maxn],t[Maxn],ft[Maxn],dp[<<][Maxn][<<],n,m,k;
  22. LL fast[Maxn];
  23. void init()
  24. {
  25. memset(dis,,sizeof(dis));
  26. memset(fast,,sizeof(fast));
  27. memset(dp,,sizeof(dp));
  28. memset(ft,,sizeof(ft));
  29. }
  30. void floyd()
  31. {
  32. int i,j,k;
  33. for(k=;k<=n;k++){
  34. dis[k][k]=;
  35. for(i=;i<=n;i++){
  36. for(j=;j<=n;j++){
  37. dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
  38. }
  39. }
  40. }
  41. }
  42. int check(int p)
  43. {
  44. int temp=;
  45. for(int i=;i<=k;i++) if(fast[i]&(1LL<<p)) temp|=(<<(i-));
  46. return temp;
  47. }
  48. void Min(int &a,int b)
  49. {
  50. a=a>b?b:a;
  51. }
  52. int solve()
  53. {
  54. int i,j,r,ki,kj,fi,fj,N;
  55. N=(<<k)-;
  56. dp[][][]=;
  57. for(ki=;ki<=N;ki++){
  58. for(fi=;fi<=N;fi++) if((ki&fi)==ki){
  59. for(i=;i<=n;i++)if(dp[ki][i][fi]<inf){
  60. for(kj=;kj<=k;kj++) if((ki&(<<(kj-)))==){
  61. int fast=check(p[kj]);
  62. Min(dp[ki|(<<(kj-))][p[kj]][fast|fi|(<<(kj-))],dp[ki][i][fi]+dis[i][p[kj]]+(((fast|fi)&(<<(kj-)))?ft[kj]:t[kj]));
  63. }
  64. for(j=;j<=n;j++){
  65. int fast=check(j);
  66. if((fast&fi)!=fast)
  67. Min(dp[ki][j][fast|fi],dp[ki][i][fi]+dis[i][j]);
  68. }
  69. }
  70. }
  71. }
  72. int ans=inf;
  73. for(i=;i<=N;i++){
  74. for(j=;j<=n;j++){
  75. ans=min(ans,dp[N][j][i]+dis[j][]);
  76. }
  77. }
  78. return ans;
  79. }
  80. int main()
  81. {
  82. int i,j,u,v,val,x,c,Case=;
  83. int T;
  84. scanf("%d",&T);
  85. while(T--){
  86. init();
  87. scanf("%d%d%d",&n,&m,&k);
  88. for(i=;i<=m;i++){
  89. scanf("%d%d%d",&u,&v,&val);
  90. dis[u][v]=dis[v][u]=min(dis[u][v],val);
  91. }
  92. for(i=;i<=k;i++){
  93. scanf("%d%d%d%d",&p[i],&t[i],&ft[i],&c);
  94. while(c--){
  95. scanf("%d",&x);
  96. fast[i]|=(1LL<<x);
  97. }
  98. }
  99. floyd();
  100. printf("Case #%d: %d\n",++Case,solve());
  101. }
  102. return ;
  103. }

hdu 4144 状态压缩dp的更多相关文章

  1. HDU 1074 (状态压缩DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...

  2. HDU 3341 状态压缩DP+AC自动机

    题目大意: 调整基因的顺序,希望使得最后得到的基因包含有最多的匹配串基因,使得所能达到的智商最高 这里很明显要用状态压缩当前AC自动机上点使用了基因的情况所能达到的最优状态 我最开始对于状态的保存是, ...

  3. hdu 4284 状态压缩dp

    题意: 有N 个点的无向图,要去其中 h个地点做事,做事需要先办理护照,之后可以挣一定数量的钱,知道了一开始有的总钱数,和 一些城市之间           道路的花费,问可不可以在 指定的 h 个城 ...

  4. hdu 2167 状态压缩dp

    /* 状态转移方程:dp[i][j]=Max(dp[i][j],dp[i-1][k]+sum[i][j]); */ #include<stdio.h> #include<string ...

  5. HDU 4856 (状态压缩DP+TSP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的 ...

  6. HDU 4640 状态压缩DP 未写完

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...

  7. 2016"百度之星" - 初赛(Astar Round2A)1002 / HDU 5691 状态压缩DP

    Sitting in Line Problem Description   度度熊是他同时代中最伟大的数学家,一切数字都要听命于他.现在,又到了度度熊和他的数字仆人们玩排排坐游戏的时候了.游戏的规则十 ...

  8. HDU 5067 (状态压缩DP+TSP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子.把地图上所有石子都运回起点,问最少耗时. 解题思路: 首先得YY出 ...

  9. hdu 4539(状态压缩dp)

    题意:曼哈顿距离是指:|x1-x2|+|y1-y2|,只要知道这个概念题意就懂了. 分析:这道题与前面做的几道题有所不同,因为当前行不仅与前一行有关,而且与前两行有关,所以我们开数组的时候还要记录前两 ...

随机推荐

  1. 网页上的JS call Unity3d里的function——SendMessage

    注意: sendmessage只可以从网页发信息到unity游戏里,但是没有返回值 只可以发布三种类型的data,不可以其他复杂的强类型 发信息的时不会做编译检测 SendMessage Workfl ...

  2. NAND flash NOR flash SDRAM区别

    nand flash:适合大容量数据存储,类似硬盘:nor flash:适合小容量的程序或数据存储,类似小硬盘:sdram:主要用于程序执行时的程序存储.执行或计算,类似内存. 区别:nor flas ...

  3. EasyMock使用手记

    from:http://www.blogjava.net/supercrsky/articles/162766.html Mock 对象能够模拟领域对象的部分行为,并且能够检验运行结果是否和预期的一致 ...

  4. GIT 中提示 please tell me who you are

    如果使用git过程中出现了,please tell me who you are ,需要设置一下使用者的身份. 1.git config user.name "username" ...

  5. linux 下cocos2dx-3.3.1环境搭建

    1.安装依赖 依赖包含: libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev libxi-dev g++ libzip-dev libpng12-d ...

  6. 【android开发】Android防止内存溢出浅析

    近期项目做得差点儿相同了,測试出现了一些问题,当中一个就是内存溢出问题,在三星手机上測试最easy出现内存溢出,在其它手机上,比方华为就没有发生,也是比較郁闷.这个问题在之前的公司,做项目时也遇到过, ...

  7. android标题栏(titlebar)显示进度条

    在后台线程中执行各种操作(网络连接.大数据存储)的时候,我们希望让客户能看到后台有操作在进行,那么既能有效的提示用户,又不占用当前操作空间,最好的方法就是在标题栏有个进度条. [代码] [Java]代 ...

  8. getFields()和getDeclaredFields()

    getFields()获得某个类的所有的公共(public)的字段,包括父类. getDeclaredFields()获得某个类的所有申明的字段,即包括public.private和proteced, ...

  9. android程序逆向工程

    随着智能手机的普及,功能越来越强大.程序也越来多和复杂化.研究一下android系统的逆向工程也是挺有意思的. 目前android逆向工程还处于初级阶段.表现在于: 1.没有完整的动态调试程序.目前由 ...

  10. Android Widget 小部件(三) 在Activity中加入Widget

    package com.stone.ui; import static android.util.Log.d; import android.app.Activity; import android. ...