/*
注:原题解转载的其他人的,只是加了一些个人想法
1.lin为存单词的数组,t为输入单词的个数,vis数组存的是使用的次数,、
len数组表示没一个单词的长度 。
2.此题目的状态是单词的位置和长度(i,length)
*/ #include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
struct node{  char lin[1000];
}s[20];  // 结构体 s 用于储存单词
/*
此步解决了保存单词的问题,使可以一个一个字母的保存,
反思也可以在输入一些单词,按单词长度从大到小输出
*/
int t,ans;
int vis[20];  //标记数组,每一次搜索初始化为 0,单词使用一次加一,超过二就不能继续使用 ,即小于等于2.
int len[20];  //单词长度数组,表示每一个单词的长度
/*
found函数
stp选择的上一个单词下标,i为后一个,例子在后面
首先 进行for循环,循环的意义也就是从之前的单词最后一个开始和
后面的单词从前向后比较。
所以总结一下循环的意义
1.在dp中确定长度l和范围
2.在字符串搜索中是两个单词比较,可参照kmp算法。如果(if)在for循环中的q与后面单词的第一个字母相等,那就好办了,直接往后搜索。做判断用的。然后定义一个相同位数,后面dfs说过。从q开始向前一个单词最后一个字母前进,后面的单词从第一个字母向后面前进,一一比较。比较不过的内层for循环就break。注意!一定要比到上一个字符的最后一个字符答案才有效因为要从 最后一个字母接嘛。然后返回x。
*/int found(int stp,int i){ //stp代表上一个已经选择的单词下标 i表示当前的单词下标   int q,w,j;  for(q=len[stp]-1;q>=1;q--){   //为使长度最长,从上一个单词的末尾开始搜索   if(s[stp].lin[q]==s[i].lin[0]){  //第一个字符匹配后继续看后面还有多少位   int x=0;         //相同位数   for(w=q,j=0;w<len[stp]&&j<len[i];w++,j++){  if(s[stp].lin[w]==s[i].lin[j])x++;  else break;  }  if(w==len[stp])return x;//注意!一定要比到上一个字符的最后一个字符答案才有效   }  }  return 0;
}
/*
dfs函数
dfs函数的状态就是(i,length),也就是已知量,目的是求输出
以此字母开头的最长的“龙”的长度。stp指的是上一个已经选择的单词,也就是“i”
*/void dfs(int stp,int length){ //上一个已经选择的单词  当前的最长单词长度   int i;  bool mark=false;//以旗子来判断,是否找到  for(i=0;i<t;i++){  if(vis[i]>2)continue;//单词已经被找过两次以上,跳过   int x=found(stp,i);  //x代表上一个单词与当前单词的匹配位数   if(x!=0){   //匹配位数不为0就继续进行下一次的单词搜索   mark=true;  length+=(len[i]-x);  //当前长度增加//举个例子,比如length和theacter,这两个单词有th这两个字母//重合的,所以结合就是lengtheacter,所以length+=(len[i]-x);   vis[i]+=1;    //当前单词用过一个加一   dfs(i,length);//然后i就变成了“上一个”继续去找了。  //上一步递归不符合题意返回至此,长度减去不符合题意的单词,单词的使用次数减一,继续选择单词   length-=(len[i]-x);  //回溯法原理。 vis[i]-=1;  }  }  if(mark==false){     //如果已经找不到单词,比较之前已经得到过的答案选择最长的单词数   ans=max(ans,length);  }
}
int main(){  int i;  char l1;  cin>>t;  for(i=0;i<t;i++){  cin>>s[i].lin;  len[i]=strlen(s[i].lin);  }  cin>>l1;  ans=0;  memset(vis,0,sizeof(vis));  //初始化单词标记数组  for(i=0;i<t;i++)if(s[i].lin[0]==l1){  vis[i]++; //每个单词使用一次,一个一个来。   dfs(i,len[i]);//当前使用的单词下标与长度   }  cout<<ans;//输出结果   return 0;
}

看法都在注释里面

关于洛古p1019单次接龙的一点看法相关推荐

  1. 我对洛伦兹曲线与GINI系数的一点看法

    数据分析有时需要针对单变量进行数据描述,有时需要针对多变量之间的关系进行数据描述,洛伦兹曲线就是为描述多变量间关系而服务的.洛伦兹曲线即累计频数分布曲线,用于分析社会财富.土地.工资分配是否公平的问题 ...

  2. 深度优先搜索——单词接龙(洛谷 P1019)

    题目选自洛谷P1019 首先在题意上可能有些误解. 两个单词合并时,合并部分取的是最小重叠部分 相邻的两部分不能存在包含关系就是说如果存在包含关系,就不能标记为使用过. 每个单词最多出现两次. (其实 ...

  3. 信息学奥赛一本通 1220:单词接龙 | 1913:【00NOIP普及组】单词接龙 | OpenJudge NOI 2.5 8783 | 洛谷 P1019 [NOIP2000 提高组] 单词接龙

    [题目链接] ybt 1220:单词接龙 ybt 1913:[00NOIP普及组]单词接龙 OpenJudge NOI 2.5 8783:单词接龙 洛谷 P1019 [NOIP2000 提高组] 单词 ...

  4. 【DFS+回溯+字符串】【洛谷P1019】【单词接龙】

    传送门 /*[DFS+回溯+字符串][洛谷P1019][单词接龙]https://www.luogu.com.cn/problem/P1019题意:给你很多个单词 一个开头首字母 每个单词至多用2次 ...

  5. android7.1+msm8937双MIC改为单MIC(晓龙相机录像声音小)

    android7.1+msm8937双MIC改为单MIC(晓龙相机录像声音小) 1.    问题背景 晓龙相机录像的时候,回播视频发现外放声音非常小,但如果用耳机来听则正常. 2.    产品和参考设 ...

  6. android+最新手机,最新Android手机性能榜单:骁龙845+8G的它只排第三

    原标题:最新Android手机性能榜单:骁龙845+8G的它只排第三 最近一段时间,各大手机厂商纷纷推出了自家的旗舰机型,尤其是小米8,vivo NEX和OPPO Find X等几款机型,让人眼前一亮 ...

  7. 【洛谷OJ C++】洛谷题单101 入门2分支结构 题解及学习笔记

    洛谷题单101链接:https://www.luogu.com.cn/training/101#problems 笔记及题解目录: 学习笔记: P5710 [深基3.例2]数的性质 P5711 [深基 ...

  8. 洛古最简单50题解(1-10)

    做为一名新手,首先要过一过题,找找成就感.(大佬略过).下面附上洛古最简单50题(大佬略过).以及最麻烦 AC代码,至少AC了. 目录·列表: 洛古最简单50题解(1-10) 洛古最简单50题解(11 ...

  9. 洛古最简单50题解(41-50)

    做为一名新手,首先要过一过题,找找成就感.(大佬略过).下面附上洛古最简单50题(大佬略过).以及最麻烦 AC代码,至少AC了. 目录·列表: 洛古最简单50题解(1-10) 洛古最简单50题解(11 ...

最新文章

  1. Android开发环境的搭建
  2. 【ESSD技术解读】 云原生时代,阿里云块存储 ESSD 快照服务如何被企业级数据保护所集成?
  3. scpi指令转换c语言,[C#源代码]使用SCPI指令对通讯端口(RS232/USB/GPIB/LAN)进行仪器编程...
  4. 孤荷凌寒自学python第六十三天学习mongoDB的基本操作并进行简单封装2
  5. 系统 应用 数据缺一不可 云优化三步走
  6. 设计模式学习01策略模式记录
  7. 关于回归中国、反垄断等问题,Google CEO 亲口回应了
  8. matlab曲线导入cad,MATLAB导入CAD数据
  9. 2021 ACA世界大赛中国赛区王者诞生
  10. Charles修改ip
  11. Spring进阶(六):can not find proxy: set exposeproxy property on advised to make it available
  12. k8s实践(6)--Kubernetes安全:API Server访问控制
  13. matlab plot函数画线,线型和颜色
  14. 树莓派3B Qt+dht11读取温湿度并写入数据库202005(8)
  15. 放弃csv,拥抱feather文件
  16. 预计销售额超20亿 长城汽车新能源购车节收获4万订单
  17. 诺基亚Lumia 900拥有惊人的快的方式连接
  18. SpringMVC 2.HelloWorld
  19. Retrofit的好处
  20. php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像) get_avat - phpStudy...

热门文章

  1. 10-6 查询选修了所有3学分课程的学生学号
  2. nprogress设置进度条
  3. EMQTT搭建及安装
  4. GoLand 使用SVN
  5. [APK签名] apksigner APK V2签名
  6. 如何用脚本修改dns服务器地址,.bat脚本修改IP地址和DNS服务器地址
  7. QQ好高明的营销手段
  8. linux安装tomcat_软件测试基础——Linux系统安装Tomcat
  9. 电脑中微信多开的小技巧
  10. 用户画像的建立方法和流程,一篇教会你