zoukankan      html  css  js  c++  java
  • 洛谷 P1019 单词接龙

    dfs的题,这个题不好想的就是这个重复单词的选取过程,我索性看了题解。发现可以直接用两个for得出,i确定第一个串的左边的位数j确定右移多少位。注意i从1开始因为str[i][str[i].size()]没有值!!!

    int bj(string a,string b)
    {
    	for(int i=1;i<=min(a.size(),b.size());i++)
    	{
    		int f=1;
    		for(int j=0;j<i;j++)
    		if(a[a.size()-i+j]!=b[j])
    		f=0;
    		if(f) return i;
    	}
    	return 0;
    }
    

    题目还有要求就是每个字符串最多用两次,那么就跟每个字符串只能访问一次一样的回溯只是use[i]=0变成了use[i]--罢了。

    我的代码(题解的算法)

    #include <bits/stdc++.h>
    using namespace std;
    string st[100];
    int use[100];
    int len;
    int n;
    int bj(string a,string b)
    {
    	for(int i=1;i<=min(a.size(),b.size());i++)
    	{
    		int f=1;
    		for(int j=0;j<i;j++)
    		if(a[a.size()-i+j]!=b[j])
    		f=0;
    		if(f) return i;
    	}
    	return 0;
    }
    void dfs(string a,int b)
    {
    	len=max(b,len);
    	for(int i=0;i<n;i++)
    	{
    		if(use[i]>=2)
    		continue;
    		int c=bj(a,st[i]);
    		if(c)
    		{
    			use[i]++;
    			dfs(st[i],b+st[i].size()-c);
    			use[i]--;
    		}
    	}
    }
    main()
    {
    	cin>>n;
    	for(int i=0;i<=n;i++)
    	cin>>st[i];
    	dfs(st[n],1);
    	cout<<len;		
    } 
    
  • 相关阅读:
    mysql数据增删改查
    Python中的逻辑运算
    Python的格式化输出
    Python变量的命名规则
    解释型语言和编译型语言的比较?
    SQLAlchemy
    ansible
    算法
    数据分析
    scrapy之日志等级
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/9815782.html
Copyright © 2011-2022 走看看