YBTOJ 折纸问题

本文介绍了如何运用深度优先搜索(DFS)解决一道蓝桥杯竞赛中的折纸问题。题目要求通过翻转操作将初始纸条转换为理想状态。70%的数据中,纸条长度不超过10,可以通过暴力搜索解决;100%的数据里,长度限制为15,需要优化策略。关键在于理解翻折操作的等效性,只枚举前半部分的翻折线即可。在判断能否达到目标时,要留意回文序列的情况。
摘要由CSDN通过智能技术生成

思路分析:

先分析一下题意:通过翻转变换,让已知的纸条变为理想的纸条,求是否能实现。

看到题目的要求,很容易想到这道题要用 dfsdfsdfs。

数据范围:70 % 的数据 N <= 10 (良心啊)爆搜就能过。

100 %数据 : N <= 15 这就需要一点点技巧了。


解题技巧:

考虑操作的等效性,发现枚举翻折线时,只需要枚举前半部分的翻折线,因为当翻折线在后半部分的时候,就相当于先整体翻折,翻折线就到了前面。

最后统计答案的时候,考虑这个数组,如果回文序列和目标纸条相同也算可以做到。


代码+解释:

#include<bits/stdc++.h>
using namespace std;
inline int read(){//快读不解释
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)&#
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值