(dfs)A -暴力模个拟(我是第一吗?我好像是第一个捏~)(原题目为Serval 的元素周期表)

简介: (dfs)A -暴力模个拟(我是第一吗?我好像是第一个捏~)(原题目为Serval 的元素周期表)

题目链接

清算时刻 - Virtual Judge (csgrandeur.cn)

Serval 的元素周期表 - Gym 103478B - Virtual Judge (csgrandeur.cn)

一些话

dfs积累的东西太少了,这种题特征很明显的,有积累的话纯粹是签到

因为这道题和A. Chat room(双指针)_栞那Kanna的博客-CSDN博客很像,都是问元素是否能组成字符串,所以我只能往双指针的方向想了,但是对于“CAL“这类的字符串,先”C“ 后 ”AL“ 还是 先 ”CA“得到的结果是完全不同的,用双指针的话很难写,所以平时多积累些套路才行。

流程

题目给了20个元素,问是否能组成输入的字符串,因为这些元素长短不一,且先后的顺序会对结果造成影响,所以直接把所有可能走一遍,对应的算法是dp和dfs,dp适合用于求最优解,此题没有最优解,所以用dfs

套路

题目有很多选择,可能性很多,且不存在最优解:


       用dfs(树状回溯)


       在每一步都试验所有的可能,当发现已经找到一种方式或者目前这种方式不可能是结果的时候,退回上一步继续尝试其他可能。很多时候每一步的处理都是一致的,这时候用递归来实现就很自然。


题目有很多选择,可能性很多,且存在最优解:


       dp

ac代码

#include <iostream>
using namespace std;
string f[30] = {"H","HE","LI","BE","B","C","N","O","F","NE", "NA","MG","AL","SI","P","S","CL","AR","K","CA"};
string s;
bool flag;
void dfs(int depth){
    if(depth == s.size()) {
        flag = true;
        return;
    }   
    if(depth != s.size()-1){
        string s1 = s.substr(depth,2);
        for(int j = 0;j < 20;j++){
            if(s1 == f[j]) {
                dfs(depth+2);
                break;
            }
        }
    }
        string s2 = s.substr(depth,1);
        for(int j = 0;j < 20;j++){
            if(s2 == f[j]) {
                dfs(depth+1);
                break;
            }
        }
}
int main(){
    cin >> s;
    dfs(0);
    if(flag) cout << "YES" << endl;
    else cout << "NO" << endl;
    return 0;
}
目录
相关文章
【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】
【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】
40 0
|
5月前
每日一题 540. 有序数组中的单一元素
每日一题 540. 有序数组中的单一元素
|
5月前
|
存储 算法
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离
算法训练,牛客.判断是不是平衡二叉树 牛客.最大子矩阵两个数组的交集牛客.数组中两个字符串的最小距离
|
5月前
|
存储 算法 测试技术
力扣经典150题第四十九题:插入区间
力扣经典150题第四十九题:插入区间
23 0
|
6月前
|
C++
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
|
6月前
|
人工智能
动态规划:小美的元素删除
动态规划:小美的元素删除
68 1
|
6月前
|
算法 搜索推荐 程序员
第四十六练 请以递归方式实现计算整数列表的和
第四十六练 请以递归方式实现计算整数列表的和
44 2
|
6月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-79 删除数组零元素
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-79 删除数组零元素
37 0
|
存储
LeetCode题:88合并两个有序数组,283移动零,448找到所有数组中消失的数字
LeetCode题:88合并两个有序数组,283移动零,448找到所有数组中消失的数字
69 0
|
算法
【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字
【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字
52 0