[ CCO 2015 ] Artskjid
\(\\\)
\(Description\)
\(N\)个点\(M\)条边的有向图,求从\(0\)号节点出发,\(N-1\)号节点结束,且图中每个点至多经过一次的最长路。
- \(N\in[2,18]\)
\(\\\)
\(Solution\)
状压\(DP\)最长路。
记忆化搜索的写法,可以通过调整回溯值来保证终点一定是\(N-1\)号节点\((\)无法到达就返回负无穷\()\)。
直接状压\(DP\)初始化要注意设成负无穷,然后统计答案只计算当前点是\(N-1\)号点的情况。
\(\\\)
\(Code\)
\(\\\)
记搜版本
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 20
#define M 410
#define R register
#define gc getchar
#define inf 2000000000
using namespace std;inline int rd(){int x=0; bool f=0; char c=gc();while(!isdigit(c)){if(c=='-')f=1;c=gc();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}return f?-x:x;
}int n,m,tot,hd[N],f[1<<N][N];
struct edge{int w,to,nxt;}e[M];inline void add(int u,int v,int w){e[++tot].to=v; e[tot].w=w;e[tot].nxt=hd[u]; hd[u]=tot;
}int dfs(int u,int s){if(u==n-1) return 0;if(f[s][u]>0) return f[s][u];int ans=-inf;for(R int i=hd[u],v;i;i=e[i].nxt){v=e[i].to;if(s&(1<<v)) continue;ans=max(ans,e[i].w+dfs(v,(s|(1<<v))));}return f[s][u]=ans;
}int main(){n=rd(); m=rd();for(R int i=1,u,v,w;i<=m;++i){u=rd(); v=rd(); w=rd(); add(u,v,w);}printf("%d\n",dfs(0,1));return 0;
}
\(\\\)
直接状压版本
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 20
#define M 410
#define R register
#define gc getchar
#define inf 2000000000
using namespace std;inline int rd(){int x=0; bool f=0; char c=gc();while(!isdigit(c)){if(c=='-')f=1;c=gc();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}return f?-x:x;
}int n,m,tot,ans,hd[N],f[1<<N][N];
struct edge{int w,to,nxt;}e[M];inline void add(int u,int v,int w){e[++tot].to=v; e[tot].w=w;e[tot].nxt=hd[u]; hd[u]=tot;
}int main(){n=rd(); m=rd();for(R int i=1,u,v,w;i<=m;++i){u=rd(); v=rd(); w=rd(); add(u,v,w);}int lim=(1<<n);for(R int s=0;s<lim;++s)for(R int u=0;u<n;++u) f[s][u]=-inf;f[1][0]=0;for(R int s=1;s<lim;++s){for(R int u=0;u<n;++u)if(((s&(1<<u))>0)&&f[s][u]>=0)for(R int i=hd[u],v;i;i=e[i].nxt){v=e[i].to; if((s&(1<<v))>0) continue;f[s|(1<<v)][v]=max(f[s|(1<<v)][v],f[s][u]+e[i].w);}ans=max(ans,f[s][n-1]);}printf("%d\n",ans);return 0;
}
转载于:https://www.cnblogs.com/SGCollin/p/9737969.html
[ CCO 2015 ] Artskjid相关推荐
- 龙岩学院计算机二级报名时间,福建龙岩学院2015年12月计算机等级考试报名通知...
福建龙岩学院2015年12月计算机等级考试报名通知 各学院: 根据上级有关文件通知,2015年12月福建省高校学生计算机应用水平等级考试开始报名,现将有关事项通知如下: 一.考试内容: 本次一.二考试 ...
- 浙江大学通信与计算机网络,新浙大2015年通信与计算机网络离线作业.doc
新浙大2015年通信与计算机网络离线作业 浙江大学远程教育学院 <通讯与计算机网络>课程作业 姓名:学 号:年级:14年春学习中心:温州学习中心 从资源共享的角度来定义计算机网络,计算机网 ...
- 计算机一级考试模拟题函数,2015年计算机一级考试模拟题(四)
2015年计算机一级考试模拟题(四) 请用Word 2003对考生文件夹下WORD.DOC文档中的文字进行编辑.排版和保存,具体要求如下: (1)将标题段("十年后的家电")文字设 ...
- CV算法复现(分类算法5/6):ResNet(2015年 微软亚洲研究院)
致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 目录 致谢:霹雳吧啦Wz:https://space.bilibili.com/18161609 1 本次要 ...
- mysql如何下载连接到visual_Visual Studio 2015 Community连接到Mysql
Visual Studio 2015 Community连接到MySQL,步骤很简单,但刚弄的时候一脸懵,现在记录如下以作备忘: 安装好VS2015和Mysql后,只需要再安装两个东西即可. 一个是S ...
- 微软批量授权版WINDOWS 10资料(截至到2015年11月,此处无下载地址)
微软批量授权版WINDOWS 10资料: 1.专业版: Windows 10 专业版(2015 年 7 月发布) WINDOWS 10专业版简体中文,32位/64位 SW_DVD5_Win_Pro_1 ...
- Enda 的 2015 下半年读书计划
2015下半年的读书计划 php 方面 <PHP设计模式> <PHP核心技术与最佳实践> <learning php设计模式> <深入php> Mysq ...
- 计算机考试批处理试题,2015计算机三级考试pc技术模拟试题及答案(八)
2015计算机三级考试pc技术模拟试题及答案(八) 1.关于Windows 98中的网上邻居的相关叙,( )是错误的. A.通过网上邻居可以游览和使用网上的全部计算机资源 B.通过网上邻居可以浏览网上 ...
- InstallShield 2015 LimitedEdition VS2012 运行bat文件
转载:http://www.cnblogs.com/fengwenit/p/4271150.html 运行bat文件 网上很多介绍如何运行bat的方法,但我这个是limted 版本,不适用. 1. ...
最新文章
- python的应用领域-Python的应用领域
- php文件里直接写上?xml version=1.0 encoding=utf-8?出错?
- python绘制四边螺旋线代_解决python彩色螺旋线绘制引发的问题
- PHP生产一个验证码图片,PHP使用GD库生成验证码图片,实现图片验证
- 现代化蔬菜大棚采用什么和计算机自动控制,温室大棚自动控制系统存在的意义以及未来的发展...
- Unity UI和场景适配
- 一步步学习java后台(一)(IDEA, Spring, Maven, MyBatis)
- 【侯捷】C++面向对象高级编程(下)
- MYSQL排序加分页报错Out of sort memory, consider increasing server sort buffer size
- 正则表达式中/g的用法
- DB2性能调整优化问题
- VM虚拟机去虚拟化教程(三)修改内存品牌和序列号
- Google Play 开发者账户已被终止的通知
- 如何在java中添加照片_Java如何将图片添加到PPT幻灯片中?
- 日语中 “不得不”的6种表达,你都学会了吗?
- Hadoop和关系型数据库间的数据传输工具——Sqoop
- 计算机在工作中的表现英语回答,外企英语面试常用表达-12个方面总结.doc
- python 面向对象编程tcp_python面向对象、类、socket网络编程
- java实现五子棋游戏
- 使用blat实现在window系统下通过BAT批处理脚本发邮件功能