\(\\\)

\(Description\)


\(N\)个点\(M\)条边的有向图,求从\(0\)号节点出发,\(N-1\)号节点结束,且图中每个点至多经过一次的最长路。

  • \(N\in[2,18]\)

\(\\\)

\(Solution\)


状压\(DP\)最长路。

记忆化搜索的写法,可以通过调整回溯值来保证终点一定是\(N-1\)号节点\((\)无法到达就返回负无穷\()\)。

直接状压\(DP\)初始化要注意设成负无穷,然后统计答案只计算当前点是\(N-1\)号点的情况。

\(\\​\)

\(Code\)


\(\\\)

记搜版本

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cctype>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<iostream>
  7. #include<algorithm>
  8. #define N 20
  9. #define M 410
  10. #define R register
  11. #define gc getchar
  12. #define inf 2000000000
  13. using namespace std;
  14. inline int rd(){
  15. int x=0; bool f=0; char c=gc();
  16. while(!isdigit(c)){if(c=='-')f=1;c=gc();}
  17. while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}
  18. return f?-x:x;
  19. }
  20. int n,m,tot,hd[N],f[1<<N][N];
  21. struct edge{int w,to,nxt;}e[M];
  22. inline void add(int u,int v,int w){
  23. e[++tot].to=v; e[tot].w=w;
  24. e[tot].nxt=hd[u]; hd[u]=tot;
  25. }
  26. int dfs(int u,int s){
  27. if(u==n-1) return 0;
  28. if(f[s][u]>0) return f[s][u];
  29. int ans=-inf;
  30. for(R int i=hd[u],v;i;i=e[i].nxt){
  31. v=e[i].to;
  32. if(s&(1<<v)) continue;
  33. ans=max(ans,e[i].w+dfs(v,(s|(1<<v))));
  34. }
  35. return f[s][u]=ans;
  36. }
  37. int main(){
  38. n=rd(); m=rd();
  39. for(R int i=1,u,v,w;i<=m;++i){
  40. u=rd(); v=rd(); w=rd(); add(u,v,w);
  41. }
  42. printf("%d\n",dfs(0,1));
  43. return 0;
  44. }

\(\\\)

直接状压版本

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cctype>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<iostream>
  7. #include<algorithm>
  8. #define N 20
  9. #define M 410
  10. #define R register
  11. #define gc getchar
  12. #define inf 2000000000
  13. using namespace std;
  14. inline int rd(){
  15. int x=0; bool f=0; char c=gc();
  16. while(!isdigit(c)){if(c=='-')f=1;c=gc();}
  17. while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}
  18. return f?-x:x;
  19. }
  20. int n,m,tot,ans,hd[N],f[1<<N][N];
  21. struct edge{int w,to,nxt;}e[M];
  22. inline void add(int u,int v,int w){
  23. e[++tot].to=v; e[tot].w=w;
  24. e[tot].nxt=hd[u]; hd[u]=tot;
  25. }
  26. int main(){
  27. n=rd(); m=rd();
  28. for(R int i=1,u,v,w;i<=m;++i){
  29. u=rd(); v=rd(); w=rd(); add(u,v,w);
  30. }
  31. int lim=(1<<n);
  32. for(R int s=0;s<lim;++s)
  33. for(R int u=0;u<n;++u) f[s][u]=-inf;
  34. f[1][0]=0;
  35. for(R int s=1;s<lim;++s){
  36. for(R int u=0;u<n;++u)
  37. if(((s&(1<<u))>0)&&f[s][u]>=0)
  38. for(R int i=hd[u],v;i;i=e[i].nxt){
  39. v=e[i].to; if((s&(1<<v))>0) continue;
  40. f[s|(1<<v)][v]=max(f[s|(1<<v)][v],f[s][u]+e[i].w);
  41. }
  42. ans=max(ans,f[s][n-1]);
  43. }
  44. printf("%d\n",ans);
  45. return 0;
  46. }

[ CCO 2015 ] Artskjid的更多相关文章

  1. P4802 [CCO 2015]路短最

    Problem 这题的题意是 求一条 经过 起点和终点的 最长路径.且一个点只能经过一次. 我们设定 \(dis_{i,j}\) 为 i 到 j 的距离(应该没有重边) 要注意的是 不能用 \(Flo ...

  2. 2015 西雅图微软总部MVP峰会记录

    2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...

  3. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  4. TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint

    前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...

  5. TFS 2015 敏捷开发实践 – 看板的使用

    看板在现代应用开发过程中使用非常广泛,不管是使用传统的瀑布式开发还是敏捷开发,都可以使用看板管理.因为看板拥有简单的管理方法,直观的显示方式,所以很多软件开发团队选择使用看板进行软件开发管理.本文不在 ...

  6. Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决

    PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...

  7. 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

    前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...

  8. .NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)

    2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET ...

  9. 2015微软MVP全球峰会见闻

    2015.10.31-2015.11.8 一周的时间完成微软MVP全球峰会旅程,这一周在不断的倒时差,行程安排非常的紧张,还好和大家请假了没有更新微信公众号,今天开始继续更新微信公众号,开始新的旅程, ...

随机推荐

  1. 调整JVM内存大小

    首次运行公司项目,出现了内存溢出,具体出现java.lang.OutOfMemoryError: PermGen space和java.lang.OutOfMemoryError:GC overhea ...

  2. JSP服务器响应

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/server-response.html: 当一个Web服务器响应浏览器的HTTP请求时,响应通常包括一个 ...

  3. spring SSH整合

    1 导入三大框架依赖的包: 2 配置web.xml: 增加spring的OpenSessionInView过滤器让Spring管理Session保证Session在一个完整的请求过程是开着的,要配置S ...

  4. ZOJ问题(2010浙江大学研究生复试上机题目[找规律] hdoj 3788)

    ZOJ问题 pid=3788">点击打开链接 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  5. [DevExpress]GridControl分页的实现

    加入两个组件:BindingNavigator和BindingSource 代码: using System; using System.Collections.Generic; using Syst ...

  6. 仰视源代码,实现strcmp

    //这是系统库的实现 int strcmp(const char* src, const char* dest) { int rtn = 0; while(!(rtn = *(unsigned cha ...

  7. 【T^T 1871】获取敌情

    获取敌情 在公元4484年,人类展开了对外界星球的征途和探索,但也不可避免的展开了和外星人之间的战争.偶然的机遇之下,美国联邦调查局截获了一串来自外星球的信息.但不知道有什么特殊的意义.所以就委托你, ...

  8. Flask中的ThreadLocal本地线程,上下文管理

    先说一下和flask没有关系的: 我们都知道线程是由进程创建出来的,CPU实际执行的也是线程,那么线程其实是没有自己独有的内存空间的,所有的线程共享进程的资源和空间,共享就会有冲突,对于多线程对同一块 ...

  9. Eclipse 安装 Maven 插件的几种方法

    转自:https://blog.csdn.net/oqqHun123/article/details/79674994 昨天直接在机器上配置了Maven环境,今天顺便把Eclipse等IDE环境配置好 ...

  10. 提交图片base64格式问题

    提交图片base64格式给后台,一定把data:image/png;base64,去掉,不然提交后后台返回的图片URL打开是一个破坏的图片.使用split("base64,")[1 ...