D - Folding Machine ( dfs )

题目链接:https://codeforces.com/gym/101473/attachments

题意:长度为n的原始数组a,和长度为m的目标数组b,问原始数组a能否通过折叠得到目标数组b。折叠方式如图。

思路:n,m<=15,可以暴力做,每次折叠后肯定会变短,所以最多折叠n-m次,暴力枚举第一次折叠哪个位置,第二次折叠哪个位置......用dfs来模拟。

dfs传入一个cnt表示当前数组a的长度;如果当前长度等于目标长度,需要判断两个数组 是否一样,因为折叠的时候有左右两个方向,所以判断两个数组是否一样时需要正反判断两次; 如果当前长度小于目标长度,直接return,不用再折了;如果当前长度大于目标长度,需要再折叠。

如何模拟出折叠后的数组?我们可以根据折叠线把数组分成两部分,距离折叠线为1的就是c[1], 距离折叠先为2的就是c[2]....,根据题意,需要左右两部分加起来。

代码:

#include <bits/stdc++.h>using namespace std;int n,m;
int a[20],b[20];
int c[20],isp;void dfs( int cnt )
{if ( isp==1 ) return ;if ( cnt==m ) {int op = 1;for ( int i=1; i<=m; i++ ) {if ( b[i]!=a[i] ) {op = 0;break;}}int op2 = 1;for ( int i=m; i>=1; i-- ) {if ( b[i]!=a[m-i+1] ) {op2 = 0;break;}}if ( op==1||op2==1 ) isp=1;}if ( cnt<m ) return ;for ( int i=1; i<cnt; i++ ) {  //  长度为cnt的数组,在第i的位置折叠int cur[20];for ( int i=1; i<=cnt; i++ ) cur[i]=a[i]; // cur数组暂时存一下a,在dfs后恢复int pos = 1;memset(c,0,sizeof(c)); // c数组是折叠后的数组,pos为折叠后的长度for ( int j=i+1; j<=cnt; j++ ) {c[pos++] += a[j];}int pos2 = 1;for ( int j=i; j>=1; j-- ) {c[pos2++] += a[j];}for ( int i=1; i<max(pos,pos2); i++ ) a[i]=c[i]; // 让a等于折叠后的数组,再进行dfsdfs( max(pos,pos2)-1 );for ( int i=1; i<=cnt; i++ ) a[i]=cur[i]; // dfs完成,恢复a数组}
}int main()
{cin >> n;for ( int i=1; i<=n; i++ ) scanf("%d",&a[i]);cin >> m;for ( int i=1; i<=m; i++ ) scanf("%d",&b[i]);isp = 0;dfs(n);if ( isp==1 ) cout << "S" << endl;else cout << "N" << endl;return 0;
}

D - Folding Machine ( dfs )相关推荐

  1. Codeforces Gym 101473D Folding Machine (暴力搜索)

    题目连接: http://codeforces.com/gym/101473/attachments 原先以为按照这个复杂度还要剪一下支,没想到暴力dfs完全可以通过. 代码: #include &l ...

  2. CodeForces - 1341F Nastya and Time Machine(dfs+构造)

    题目链接:点击查看 题目大意:给出一棵树,现在要求从点1出发遍历所有的结点一遍后再回到点1,额外给出一个时光机,可以到某个节点的任意时刻,需要满足的条件如下: 初始时在节点 1 ,时间为 0 每次操作 ...

  3. 折弯机液压系统设计(设计说明书+9张CAD图纸)

    目  录 引   言 第一章 绪论 1.1液压技术现状 1.2本课题主要研究内容 1.3设计步骤 第二章 任务分析 2.1技术要求 2.2任务分析 第三章 负载与运动分析 3.1工况分析 3.2负载图 ...

  4. Re:从零开始的机器学习 - Machine Learning(一) 线性回归

    从我对整个职业生涯的规划出发,我不仅想做一些高质量的应用(软件工程的角度),还想做一些激动人心的应用,所以我希望能在机器学习的方向走,尽管我在大学粗浅的学了些皮毛,但如果要把机器学习作为职业发展的话这 ...

  5. 一周一论文(翻译)—— [PVLDB 12] Distributed GraphLab A Framework for Machine Learning 分布式机器学习图计算框架

    摘要 虽然高级别数据并行框架,像MapReduce,简化了大规模数据处理的设计和实现的系统,他们没有自然或有效地支持许多重要数据挖掘和机器学习算法并且导致学习系统效率低下.为了帮助填补这一重要空白,我 ...

  6. 【HDU - 1045】Fire Net (dfs 或二分图)

    题干: Suppose that we have a square city with straight streets. A map of a city is a square board with ...

  7. 从Folding@home项目看GPU通用计算发展

    GPU通用计算发展历程简析 前言:Folding@home(蛋白质折叠过程研究)项目GPU客户端的推广,使得普通玩家也有机会体会GPU通用运计算能力,让显卡也能成为支持公益事业的重要力量.分布式计算的 ...

  8. 【2018.07.29】(深度优先搜索/回溯)学习DFS算法小记

    参考网站:https://blog.csdn.net/ldx19980108/article/details/76324307 这个网站里有动态图给我们体现BFS和DFS的区别:https://www ...

  9. python dfs算法_算法工程师技术路线图

    前言 这是一份写给公司算法组同事们的技术路线图,其目的主要是为大家在技术路线的成长方面提供一些方向指引,配套一些自我考核项,可以带着实践进行学习,加深理解和掌握. 内容上有一定的通用性,所以也分享到知 ...

最新文章

  1. 另存为里面没有jpg_选用打印捕捉功能将 SolidWorks 画面另存为JPG格式高清大图
  2. 在吗?认识一下JWT(JSON Web Token) ?
  3. Go语言底层原理剖析
  4. R语言数据类型及数据类型判断
  5. Python+Selenium练习篇之11-浏览器上前进和后退操作
  6. MongoDB trouble shoot sharded clusters
  7. ubuntu首次给root用户设置密码和root用户登录设置
  8. boost::core模块实现范围枚举C++11
  9. vc++ 项目里External dependencies 的文件存放内容和各个文件的存放内容
  10. python中函数startswith的用法_Python中用startswith()函数判断字符串开头的教程
  11. 推荐5款好用的Java软件,初学者必看
  12. tftp命令 – 上传及下载文件
  13. 宽带拨号找不到netcfg.hlp文件
  14. m3u8视频下载转为mp4
  15. 人生如逆旅,我亦是行人——与余光中先生握一次手(二)
  16. Centos7安装oracle11g R2超级详细步骤
  17. GNU开发工具——WireShark网络分析工具
  18. 腾讯清凉云dd win 7
  19. 51单片机串口SBUF是特殊寄存器,只要不写入新的数据就不会消失,写入新的数据就会覆盖之前的,单片机复位后初始值为不确定值
  20. 透视表中如何使用多条件中位数

热门文章

  1. 大数据英语术语(第一弹)
  2. WY C语言入门(5)
  3. 大场景三维点云语义分割模型
  4. php 数组 print_r,PHP中的print_r 与 var_dump 输出数组
  5. E. Add Modulo 10(规律)
  6. dnf 跨服 服务器 位置,DNF1228跨区了能干嘛_最新的具体跨区怎么分
  7. 华为WATCH GT 3和其他品牌手表比怎么样
  8. 今晚8点:手把手教你使用 ART-Pi 入门 TOUCHGFX
  9. 华为PPPoE简单实现
  10. 二维码下载,区分是 ios 和 android