P1278 单词游戏

状态压缩,用二进制来保存状态

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n;
 4 string words[17];
 5 int rem[17][70000];//末尾是第i个单词的时候,用了集合是j的元素
 6 int ans;
 7 int dfs(int now,int book)
 8 {
 9     if(rem[now][book]!=-1)return rem[now][book];
10     rem[now][book]=0;
11     for(int i=0;i<n;i++)
12     {
13         if(*(words[now].end()-1)==words[i][0]/*取最后一个字母判断是否可以接*/&&((book&(1<<i))==0)/*是否用过*/)
14         {
15             rem[now][book]=max(rem[now][book],dfs(i,(book|(1<<i)))/*添加元素继续搜索*/);
16         }
17     }
18     return rem[now][book]+=words[now].size();
19 }
20 int main()
21 {
22     memset(rem,-1,sizeof(rem));
23     scanf("%d",&n);
24     for(int i=0;i<n;i++)
25         cin>>words[i];
26     for(int i=0;i<n;i++)//枚举开头的单词
27     {
28         ans=max(ans,dfs(i,(1<<i)));
29     }
30     printf("%d",ans);
31 }

原文地址:https://www.cnblogs.com/1129-tangqiyuan/p/11614837.html

时间: 2024-10-13 21:20:14

P1278 单词游戏的相关文章

P1278 单词游戏 - DFS

P1278 单词游戏 传送门 Sol: 枚举词典中的每个单词,然后跑DFS.再加个记忆化就不会T了. AC Code: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 16 + 4,M = 100 + 10; int n; char S[N][M]; int len[N]; int f[N][1<<N]; int dfs(int

模拟猜单词游戏

模拟实现猜单词游戏,纯模拟,不涉及图形界面,注释很详细,虽然本人代码写得丑,但是希望可以给大家提供帮助 #include<algorithm> #include<cstdlib> #include<cstring> #include<fstream> #include<ctime> #include<cmath> #include<iomanip> #include<windows.h> using names

DOM练习小记--简单的拼单词游戏

(资料源自<Head First Ajax>第七章) 书中另一个单页游戏案例,综合了DOM和事件处理,先总结一下页面布局和js编程的思路.涉及到服务端交互的暂时按下,毕竟还没有自己把服务端环境搭起来. 1) 内容简介 书中给的样本页面和样式是布置好的,初始静态页面如下: 4row*4col布局,每次初始化都会随机出现16个字母图片: 点击任意字母会把对应字母输入到旁边字母框中,每次提交前每个字母只能点击一次: 需要拼出一个合法的单词,OK后点击submit提交(Ajax): 如果合法则在分数框

单词游戏

https://loj.ac/problem/10106 题目描述 给出n个单词,问能否完成所有单词的单词接龙. 思路 如果以单词为节点,条件为边建图,我们就要在图上求是否存在一条哈密尔顿道路,这显然难以实现.我们考虑以单词为边,以字母为节点,那么题目就相当于在图上求一条欧拉道路,但我们并不知道图是否是一张连通图,非连通图显然无法找到一条欧拉路径.所以我们还要再尝试找一遍欧拉路径来判断是否连通.而找欧拉路径容易造成栈溢出,所以我们可以递归改循环.当然用并查集判连通性也可以. #include <

单词游戏-基于SQLite+Qt的C++项目

SQLite文件数据库的操作 Qt插件的安装配置 1.VS2008下安装Qt开发包 解压缩4.7.3.rar到C:\Qt\4.7.3\ Qt for VS addin2.安装并配置Visual Assist X 重点难点1,连接SQLite文件数据库并操作 重点难点2:Qt界面GUI编程的操作 代码太绕,太杂,暂时不贴! C++

单词挑战设计0.1

Outline 先给出我总结的小组讨论之后的情况,然后给出简单的设计介绍. Conconlusion of Discussion, 2015.11.08 1.极关键的问题:组员或多或少都疑虑改动API的时间成本.难度,导致我们Brain Storm没那么富有创新 2.一致意见:按照baseline要求开发,不加入API改动级别的feature. 3.我观察了App商店现有的词典,发现几条重要反馈 同步 主题颜色 所以我们在准备设计之前还有困惑:我们的单词挑战, 1.以后随着“登录同步”功能的加入

A.探路者——贪吃蛇游戏(测评人:黄泽宇)

一.基于NABCD评论作品,及改进建议 每个小组评论其他小组Alpha发布的作品:1.根据(不限于)NABCD评论作品的选题:2.评论作品对选题的实现效果:3.就现有技术和工作量,不改变选题的主要方向,为该作品在beta版本可增减的功能提出改进意见. 1.根据(不限于)NABCD评论作品的选题. 根据探路者的Alpha发布选题背景及意义进行考量: 贪吃蛇游戏团队的选题背景及意义 NABCD标准考量 贪吃蛇作为一个经典的游戏,设计简单,实用和娱乐性高.对于贪吃蛇传统的玩法,大家众所周知,即:玩家通

Diameter协议

Diameter是计算机网络中使用的一个认证.授权和审计协议.它从功能更少的RADIUS协议进化而来,并且取代之. Dimater应用通过添加新的命令或属性扩展基础协议,例如使用扩展认证 协议(EAP). 与RADIUS协议比较 名字是一个单词游戏(从RADIUS,半径到DIAMETER,直径),从前任RADIUS协议演化而来(直径是半径的二倍).Diameter不直接后向兼容,但是提供RADIUS升级路径.DIAMETER提供的主要特征(RADIUS中缺乏的)有: * 可靠传输协议(TCP或S

cs106a编程方法学作业解答(4)(Hangman)

我发现assignment4有两种版本,除了上篇文章写的Yahtzee游戏,还有一种要求写一个叫做hangman的猜单词游戏的版本.大概是同一课程不同年份的内容有些出入的原因.这个作业我也做了.代码如下: 首先是Hangman.java的 /* * File: Hangman.java * ------------------ * This program will eventually play the Hangman game from * Assignment #4. */ import