问题描述
  如果一个序列满足下面的性质,我们就将它称为摆动序列:

  1. 序列中的所有数都是不大于k的正整数;


  2. 序列中至少有两个数。


  3. 序列中的数两两不相等;


  4. 如果第i – 1个数比第i – 2个数大,则第i个数
比第i – 2个数小;如果第i – 1个数比第i – 2个数小,则第i个数比第i – 2个数大。

  比如,当k = 3时,有下面几个这样的序列:


  1 2


  1 3


  2 1


  2 1 3


  2 3


  2 3 1


  3 1


  3 2


  一共有8种,给定k,请求出满足上面要求的序列的个数。
输入格式
  输入包含了一个整数k。(k<=20)
输出格式
  输出一个整数,表示满足要求的序列个数。
样例输入
3
样例输出
8
 
思路:这个题与其说是动态规划,不如说是找规律。
1.k个数组成的k个数的摆动序列就只有两种。
2.k个数组成的2个数的摆动序列根据高二学的排列组合就是C2k*2,因为k中选2个数。
3.然后再找规律,四个数中选3个,就相当于四个数中选1个,即一共四种选法,而这每种选法构成的摆动序列只有两种,例如1 2 3 4,选1 2 3,构成的摆动序列就是2 1 3或者2 3 1,所以4选3构成8种摆动序列,然后继续推,得到一个表格就能找到其中的规律。

  2 3 4 5 6 7 8
2 2 0 0 0 0 0 0
3 6 2 0 0 0 0 0
4 12 8 2 0 0 0 0
5 20 20 10 2 0 0 0
6 30 40 30 12 2 0 0
7 42 70 70 42 14 2 0
8 56 112 140 112 56 16 2

 
 
 
 
 
 
 
 
横坐标表示k,纵坐标表示选取的个数。
所以第一列就是C2k*2,代码表示: memo[i][2] = i * i - i; 
剩下的就是 memo[i][j] = memo[i - 1][j] + memo[i - 1][j - 1] 
最后结果就是把k的那一行累加即可 res += memo[k][i]; 
代码
 1 #include<iostream>
2 #include<vector>
3 using namespace std;
4
5 int main()
6 {
7 int k;
8
9 cin >> k;
10 vector< vector<int> > memo(k+1, vector<int>(k+1,0));
11
12 for (int i = 2; i <= k; i++)
13 {
14 memo[i][2] = i * i - i; //Cn2*2;
15 }
16
17 for (int i = 3; i <= k; i++)
18 {
19 for (int j = 3; j <= k; j++)
20 {
21 memo[i][j] = memo[i - 1][j] + memo[i - 1][j - 1];
22 }
23 }
24
25 int res = 0;
26 for (int i = 2; i <= k; i++)
27 {
28 res += memo[k][i];
29 }
30
31 cout << res;
32 return 0;
33 }

DP:摆动序列的更多相关文章

  1. ALGO-9_蓝桥杯_算法训练_摆动序列(DP)

    问题描述 如果一个序列满足下面的性质,我们就将它称为摆动序列: . 序列中的所有数都是不大于k的正整数: . 序列中至少有两个数. . 序列中的数两两不相等: . 如果第i – 1个数比第i – 2个 ...

  2. LeetCode——376.摆动序列

    如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个摆动序列, ...

  3. Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列

    正整数的摆动序列 问题描述 如果一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列.即 a[2i]<a[2i-1], a[2i+1]>a[2i]. 小明想知道,长度为 m ...

  4. LeetCode算法训练-贪心算法 455.分发饼干 376. 摆动序列 53. 最大子序和

    欢迎关注个人公众号:爱喝可可牛奶 LeetCode算法训练-贪心算法 455.分发饼干 376. 摆动序列 53. 最大子序和 前置知识 贪心算法核心是找局部最优解,通过局部最优推导出全局最优 Lee ...

  5. [Swift]LeetCode376. 摆动序列 | Wiggle Subsequence

    A sequence of numbers is called a wiggle sequence if the differences between successive numbers stri ...

  6. Leetcode 376.摆动序列

    摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个 ...

  7. Java实现 LeetCode 376 摆动序列

    376. 摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5 ...

  8. Java实现 蓝桥杯VIP 算法训练 摆动序列

    问题描述 如果一个序列满足下面的性质,我们就将它称为摆动序列: 1. 序列中的所有数都是不大于k的正整数: 2. 序列中至少有两个数. 3. 序列中的数两两不相等: 4. 如果第i – 1个数比第i ...

  9. 【LeetCode】NO.376 摆动序列 (Python) [贪心算法]

    376. 摆动序列 题目 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 .第一个差(如果存在的话)可能是正数或负数.仅有一个元素或者含两个不等元素的序列也视作摆动序列. 例 ...

  10. SYCOJ2100摆动序列

    题目-摆动序列 (shiyancang.cn) 直接分成两部分,插入即可.只有一个地方不对,那就是符号.两个大的放一个小的,两个小的放一个大的.那么每次的大的放最大的,每次的小的放其次小的,用完就不用 ...

随机推荐

  1. C++ 核心指南之 C++ 哲学/基本理念(下)

    C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup.Herb Sutter 等顶尖 C+ 专家创建的一份 C++ 指南.规则及最佳实践.旨在帮助大家正确 ...

  2. WPF的前世今生

    1.WPF的布局 WPF的布局分为相对定位和绝对定位两种. 绝对定位一般用Canvas 相对定位一般用Grid.StackPanel.DockPanel.WrapPanel 2.MVVM模式是什么 M ...

  3. 一个超经典 WinForm 卡死问题的最后一次反思

    一:背景 1. 讲故事 在我分析的 200+ dump 中,同样会遵循着 28原则,总有那些经典问题总是反复的出现,有很多的朋友就是看了这篇 一个超经典 WinForm 卡死问题的再反思 找到我,说 ...

  4. Python基础语法--课程笔记

    Smiling & Weeping ----我的心是旷野的鸟,在你的眼睛里找到了它的天空 定义和使用类: 1.声明类: class类名: 成员变量,成员函数 2.定义类的对象: 对象名 = 类 ...

  5. 5-MySQL列定义

    1.列定义 说明:在MySQL中,列定义(Column Definition)是用于定义数据库表中每一列的结构的语句.它指定了列的名称.数据类型.长度.约束以及其他属性. 2.主键和自增 主键:PRI ...

  6. Record - Dec. 1st, 2020 - Exam. REC

    Prob. 1 Desc. & Link. 行走的形式是比较自由的,因为只要走到了最优答案处就可以不管了,所以不需要考虑游戏的结束. 考虑二分答案. 然后预处理出每个节点到 \(s\)(另一棵 ...

  7. Redis持久化 (RDB和AOF) 梳理

    Redis有两种持久化方案: RDB持久化 AOF持久化 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照.简单来说就 ...

  8. git升级编译安装

    一.删除旧版本git 方法一. yum remove git -y (centos环境) apt-get remove git -y (Ubuntu环境) 方法二. which git [root@p ...

  9. daemonset应用创建了,但是没有pod被调度起来

    环境: k8s版本1.25.2  一个master  两个node节点 集群节点全部允许调度(无污点),且资源充足. 操作系统版本: Ubuntu22.01 排查思路: 查看kubelet 日志,和c ...

  10. windows系统上的大文件拆分合并

    上周碰到一个并不算很大的问题,但是也有记录的价值. 从公司带出来的离线补丁包需要传到客户服务器上,但是被告知并不能在现场机器上插U盘,会触发告警.上传只能把U盘上的内容通过私人笔记本刻录到光盘上,插光 ...