对于一个数列中的某个数,如果这个数比两侧的数都大或比两侧的数都小,我们称这个数为这个数列的一个转折点。

如果一个数列有t个转折点,我们称这个数列为t+1调数列。

给定两个正整数n,k。求在1~n的全排列中,有多少个数列是k调数列?

输入描述:
两个正整数n,k

输出描述:
答案,一个整数

输入样例:
4 2输出样例:
12
方法一:全排列+剪枝

思路

对于每一种排列,遍历时都检查是否可以提前截断

#include<bits/stdc++.h>
using namespace std;const int N=1e3+5;
int n, k, ans, A[N];bool chk(int i) {if (A[i-1]<A[i] && A[i]>A[i+1]) return true;if (A[i-1]>A[i] && A[i]<A[i+1]) return true;return false;
}
void dfs(int i, int c) {if (i>=3 && chk(i-2)) c++;   //0123,就检查位置1if (c>k-1 || c+n-i<k-1) return; //点转折过多,或者剩下的数都不足以构成k-1个转折点if (i==n-1) {if (i-1>0 && chk(i-1)) c++;if (c==k-1) ans++;return;}for (int j=i; j<n; j++) {swap(A[i], A[j]);dfs(i+1, c);swap(A[i], A[j]);}
}
int main() {std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>k;for (int i=0; i<n; i++) A[i]=i+1;dfs(0, 0);cout << ans;return 0;
}

【回溯】B035_LQ_k调数列的个数(全排列+剪枝)相关推荐

  1. python全排列问题_Python基于回溯法子集树模板解决全排列问题示例

    本文实例讲述了Python基于回溯法子集树模板解决全排列问题.分享给大家供大家参考,具体如下: 问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模 ...

  2. C语言:最小数与数列第一个数交换

    描述 输入一个正整数(1<n<100),再输入n个整数,将最小数 与第一个数交换(若最小数就在第一位,不需要交换),输出交换后的n个数 [输入] 第一行输入一个正整数n. 第二行输入n个整 ...

  3. 回溯法求解装载问题(DFS + 剪枝策略)

    参考:https://blog.csdn.net/m0_38015368/article/details/80196634 问题描述: 有n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i ...

  4. java - 菲波拉契数列 兔子个数

    菲波拉契数列:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 结果演示 代码演示 package com.tw ...

  5. N个数全排列的第M个排列是?(全排列)

    给你N个整数,分别是1,2,3,...N.问你全排列的第M个排列为多少? Input 输入包含几个测试用例.每个测试用例由两个数字组成,N和M(1<=N<=1000, 1<=M< ...

  6. Leetcode-单调数列(896)

    题目描述 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j,A[i]& ...

  7. C#LeetCode刷题之#896-单调数列(Monotonic Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3760 访问. 如果数组是单调递增或单调递减的,那么它是单调的. ...

  8. pil 获取图像尺寸_从命令行获取图像尺寸

    pil 获取图像尺寸 The command line is a gold mine if you come from the perspective of a UI lover.  Getting ...

  9. 用回溯法找出n个自然数中取r个数的全排列

    回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验.在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯. 本实例是用回溯法输出n个自然数中以 ...

最新文章

  1. loadrunner另类玩法【测试帮日记公开课】
  2. 基于神经网络的溶解度预测和回归分析
  3. C++知识点56——类模板(1、模板类的介绍)
  4. android-cmake环境变量
  5. c语言goto语句用法_C语言中的goto语句该不该使用?
  6. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1066:满足条件的数累加
  7. lua运行外部程序_LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库
  8. Linux串口编程_termios
  9. Web性能瓶颈查找经验总结
  10. 关于websocket长链接的使用
  11. 自制电吉他效果器 DIY PCB(三)原理图与封装 上
  12. 汇编实验 用Radasm设计生成一个对话框,实现如图1.1所示的四则运算计算器
  13. SQL SERVER数据库三种数据插入方式
  14. 【GDOI2017】【gmoj5101】【7.15模拟赛T4】凡喵识图【暴力】
  15. Linux系统 应急响应自动化检测工具 GScan ——使用教程
  16. 远程办公与人心、机制、工具
  17. python调用百度AI接口识别营业执照
  18. C语言期末考试成绩奖励编码,C语言期末考试总结,看完保你过
  19. 用JS做一个简易的时间显示动态效果
  20. Harris角点两篇比较好的文章

热门文章

  1. java毕业生设计电子商城系统计算机源码+系统+mysql+调试部署+lw
  2. HTML5 学习笔记day01
  3. Python数据清洗-——(1)选择子集,列名重命名;(2)缺失值处理;(3)数据转换(重复值等);(4)异常值的处理
  4. 关于Android2.2定制出厂默认输入法的一些心得
  5. 查看oracle是否开闪回,开启 oracle 的闪回功能
  6. EOS学习笔记(四)- eosjs
  7. tagwriter汉化版_【NFC TagWriter by NXP】安卓下载_NFC TagWriter by NXPv3.8.60最新手机版下载-91手游网...
  8. 二进制、八进制、十进制与十六进制之间的转换(图片说明+举例介绍)
  9. BSV 智能合约入门(4)- sCrypt 合约实战篇 - P2PKH 合约化
  10. 大页内存(HugePages)在通用程序优化中的应用