单词游戏
来源:互联网 发布:手机淘宝怎么指纹支付 编辑:程序博客网 时间:2024/05/17 20:31
QAQ
标签是记忆化搜索
我居然第一下想到的是状压DP?
先给出状压的解法
令DP[i][j]是状态i下最后一个单词是j是否可行
转移方程 dp[i][j|(1<< k-1)]=dp[i][j](前提是满足要求)
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define ll long longusing namespace std;bool dp[1<<17][17];char w[101],t[101],len[101];//w[i]记录i单词的开头字母,t[i]记录i单词结尾字母char s[200];int main(){ int n; scanf("%d\n",&n); for(int i=1;i<=n;i++) scanf("%s",(s+1)),w[i]=s[1],t[i]=s[strlen(s+1)],len[i]=strlen(s+1); for(int i=1;i<=n;i++) dp[1<<i-1][i]=1;//状态初始化 dp[0][0]=1; for(int i=0;i<1<<n;i++)//枚举基础状态 for(int j=1;j<=n;j++)//枚举最后一个单词 if(dp[i][j])//前提状态为真 { for(int k=1;k<=n;k++) if(((1<<k-1)&i)==0&&j!=k)//在i状态中不存在单词K if(t[j]==w[k]) dp[i|(1<<k-1)][k]=1;//满足条件,转移OK! } int ans=0; for(int i=0;i<1<<n;i++) for(int j=1;j<=n;j++) if(dp[i][j]) { int num=0; for(int k=1;k<=n;k++) if(i&(1<<k-1)) num+=len[k];//暴力统计长度 //puts(""); ans=max(ans,num); //得到最大长度 } printf("%d",ans); return 0;}
记忆化好像也要状压?算了,不写了。
阅读全文
1 0
- 单词游戏
- 单词游戏
- 【单词游戏】解题报告
- 7.9 单词游戏 搜索
- 单词搜索迷宫游戏
- Boggle单词游戏求解
- 猜单词游戏
- 单词玩游戏
- 模拟猜单词游戏
- 【c++】猜单词游戏
- 洛谷 P1278 单词游戏
- 猜单词的游戏
- 洛谷P1278 单词游戏
- P1278 单词游戏
- 猜单词游戏
- 单词游戏: hangman
- [各种面试题] 单词游戏
- 1337code+没有背单词+游戏
- Error:Execution failed for task ':app:clean'. > Unable to delete directory 解决方案
- SQL server 事务介绍,创建与使用
- java版括号匹配问题
- 基于SpringBoot使用Spring jpa实现对Oracle表的增、删、改、查的Spring WebService
- Chrome插件 postman的使用方法详解
- 单词游戏
- 常见latch闩锁等待
- Java实现app接口和Socket消息传递(5)Java连接MySQL
- linux的版本关系
- mtk-linkit-webui编译环境及流程
- textarea限制每行可输入固定个数的字符
- mysql查看当前所有数据库大小
- curl安装和学习笔记
- android 在代码中获取SHA1值