博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1278 单词游戏
阅读量:6271 次
发布时间:2019-06-22

本文共 1834 字,大约阅读时间需要 6 分钟。

带权有向图上点不重复的最长路径 状压dp

来自仓鼠老师的话:

这题实际上就是带权有向图上点不重复的最长路径。从理论上来说,应该是个NP问题。

就是把每一句话设为一个点,然后可以\(O(n^2)\)的连边,怎么连边就不说了吧。。

dp[i][j]为当前走到\(i\)点,已走的状态为\(j\)。然后就可以愉快地进行状压dp。

有一个经验性总结:枚举状态的那一维一定要放在前面!不然答案是错的!我已经亲身经历过3次了!

今年再来出状压dp哩

代码:

#include
#include
#include
const int maxn = 17;struct Edges{ int next, to;} e[maxn * maxn];int head[maxn], tot;int start[maxn], end[maxn];int weight[maxn];int dp[maxn][65537];int n;int id(char x){ if(x == 'A') return 1; else if(x == 'E') return 2; else if(x == 'I') return 3; else if(x == 'O') return 4; else if(x == 'U') return 5;}void link(int u, int v){ e[++tot] = (Edges){head[u], v}; head[u] = tot;}int main(){ scanf("%d", &n); for(int i = 1; i <= n; i++) { char ch[105]; scanf("%s", ch); start[i] = id(ch[0]); int len = strlen(ch); end[i] = id(ch[len - 1]); weight[i] = len; } for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(end[i] == start[j]) link(i, j); } } int S = (1 << n) - 1; for(int i = 1; i <= n; i++) dp[i][1 << (i - 1)] = weight[i]; for(int j = 1; j <= S; j++) { for(int i = 1; i <= n; i++) { if((1 << (i - 1)) & j) { for(int k = head[i]; k; k = e[k].next) { int v = e[k].to; if((1 << (v - 1)) & j) continue; dp[v][j | (1 << (v - 1))] = std::max(dp[v][j | (1 << (v - 1))], dp[i][j] + weight[v]); } } } } int ans = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= S; j++) { ans = std::max(ans, dp[i][j]); } } printf("%d\n", ans); return 0;}

转载于:https://www.cnblogs.com/Garen-Wang/p/9883089.html

你可能感兴趣的文章
Ubuntu C/C++开发环境的安装和配置
查看>>
百世汇通快递地区选择插件,单独剥离
查看>>
Linux系统调用---同步IO: sync、fsync与fdatasync【转】
查看>>
【MyBatis学习06】输入映射和输出映射
查看>>
[LeetCode] Decode String 解码字符串
查看>>
数字逻辑的一些基本运算和概念
查看>>
ant重新编译打包hadoop-core-1.2.1.jar时遇到的错
查看>>
【★★★★★】提高PHP代码质量的36个技巧
查看>>
3 weekend110的配置hadoop(格式化) + 一些问题解决 + 未免密码配置
查看>>
JavaScript Creating 对象
查看>>
Java compiler level does not match the version of the installed Java project facet.(转)
查看>>
WPF MediaElement.Position属性
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
spring mysql多数据源配置
查看>>
[React] Override webpack config for create-react-app without ejection
查看>>
检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。...
查看>>
测试java的父子类化
查看>>
HDOJ 1008
查看>>
安装thrift出现的一些问题
查看>>
makefile编写---单个子目录编译模板
查看>>