P1109单词接龙
一.题目描述:
二.题目解析:
刚开始一直以为最多只有两个相同个输入字符串,后来意识到看错题了,就开始改,第一遍写重叠个数那个循环的时候从尾巴到头,全wa,第二遍写从头到尾,对三个T三个,第三遍写了个剪枝ac,这个题的思路其实是很简单的,只是实现的时候比较复杂,然后容易出错(调了两个小时)>0<!这题主要是注意到一个贪心策略,找重叠最小的加上去长度才会是最大的,所以我们写循环就要从头到尾巴。然后要注意的是当你的长度和你加上去的长度一样时,其实这一步是没有必要的,所以可以剪掉,不然T3个点。
三.代码实现:
1 #include "bits/stdc++.h" 2 using namespace std; 3 string s[30]; 4 int bk[100]; 5 int n,mlen = 0; 6 bool jdg(string a,string b,int z)//计算重叠 7 { 8 int i,j; 9 for(i = a.length() - 1,j = z - 1;i >= 0 && j >= 0;j--,i--) 10 if(a[i] != b[j]) return false; 11 return true; 12 } 13 void dfs(string ans) 14 { 15 int num = ans.length(); 16 mlen = max(mlen,num); 17 for(int i = 0;i < n;i++){ 18 if(bk[i] < 2){ 19 string temp = ans; 20 int z; 21 for(z = 1;z < s[i].length();z++) 22 if(jdg(temp,s[i],z)) break; 23 for(int l = z;l <= s[i].length() - 1;l++) temp += s[i][l]; 24 if(temp.length() == ans.length()) continue; 25 bk[i]++; 26 dfs(temp); 27 bk[i]--; 28 } 29 } 30 } 31 int main() 32 { 33 cin >> n; 34 char c; 35 for(int i = 0;i < n;i++) 36 cin >> s[i]; 37 cin >> c; 38 string t; 39 dfs(t + c); 40 cout << mlen << endl; 41 return 0; 42 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~