美丽序列

题目描述

牛牛喜欢整数序列,他认为一个序列美丽的定义是
1:每个数都在0到40之间
2:每个数都小于等于之前的数的平均值
具体地说:for each i, 1 <= i < N,  A[i] <= (A[0] + A[1] + ... + A[i-1]) / i.
3:没有三个连续的递减的数

现在给你一个序列,每个元素是-1到40,你可以将序列中的-1修改成任意的数,求你可以得到多少个美丽序列,答案对1e9+7取模

输入描述:

第一行输入一个整数n (1 ≤ n ≤ 40)第二行输入n个整数

输出描述:

输出一个整数

示例1

输入

2
3 -1

输出

4

示例2

输入

3

5 3 -1

输出

2

示例3

输入

3
-1 0 40

输出

0

示例4

输入

11
-1 40 -1 -1 -1 10 -1 -1 -1 21 -1

输出

579347890

备注:

子任务1: n <= 10
子任务2: n <= 20
子任务3: 无限制

题目链接:https://ac.nowcoder.com/acm/problem/21313

解题思路:

按照动态规划的一般步骤 , 假如 有个序列 ***** 5   我们需要知道 当前数与前一个数的大小关系 
AC代码:

#include<string.h>
#include<iostream>
#define Mod 1000000007
using namespace std;
int main(){int n;long long a[42];long long dp[42][42][3][1602];// dp[i][j][1][k]代表当前 处理到第i个且值为j 在递减序列中第 1个前i个和为k memset(dp,0,sizeof(dp));cin>>n;for(int i=1;i<=n;i++)cin>>a[i];//初始化if(a[1]==-1) {for(int i=0;i<=40;i++)dp[1][i][1][i]=1;}else dp[1][a[1]][1][a[1]]=1;for(int i=2;i<=n;i++){if(a[i]==-1){//若当前数为 -1 即可为任何数for(int j=0;j<=40;j++){//枚举当前可能的数 0~40for(int L=0;L<=40;L++){ //枚举当前前一个(i-1)可能的数 0~40for(int k=j*(i-1);k<=1600-j;k++){//枚举前(i-1)个满足条件的和k if(j>=L){//若当前大于前一个数 即打破递减序列的条件 dp[i][j][1][k+j]=(dp[i][j][1][k+j]+dp[i-1][L][1][k])%Mod;dp[i][j][1][k+j]=(dp[i][j][1][k+j]+dp[i-1][L][2][k])%Mod;}else dp[i][j][2][k+j]=(dp[i][j][2][k+j]+dp[i-1][L][1][k])%Mod;  }}}}else{//若为具体的大小 for(int L=0;L<=40;L++){//枚举上一个数的大小for(int k=a[i]*(i-1);k<=1600-a[i];k++){//枚举前(i-1)个满足条件的和k if(a[i]>=L){dp[i][a[i]][1][k+a[i]]=(dp[i][a[i]][1][k+a[i]]+dp[i-1][L][1][k])%Mod;dp[i][a[i]][1][k+a[i]]=(dp[i][a[i]][1][k+a[i]]+dp[i-1][L][2][k])%Mod;}else dp[i][a[i]][2][k+a[i]]=(dp[i][a[i]][2][k+a[i]]+dp[i-1][L][1][k])%Mod;}}}}long long sum=0;for(int j=0;j<=40;j++){//枚举 可能的大小for(int k=j*n;k<=1600;k++){//枚举可能的和sum=(sum+dp[n][j][1][k])%Mod;//当前数大小为j且在递减位置1 和为k的美丽序列数sum=(sum+dp[n][j][2][k])%Mod;}}cout <<sum<<endl;return 0;
}

美丽序列(动态规划)相关推荐

  1. 洛谷P2501数字序列 动态规划

    题目 题目链接 题解 这道题目我觉得是神题,非常有意思的题目,也挺难做的. 第一问:求最少需要改变的数量 这一问比较简单,之前也见过这种套路. 定义dp[i]dp[i]dp[i]表示aaa序列中a[1 ...

  2. 51nod_2369 奈芙莲的序列(动态规划)

    奈芙莲的序列 Problem Description 有一天可爱的Nephren得到了一个序列,一开始,她取出序列的第一个数,形成一个新的序列B,然后取出序列A的第二个数,放在序列B的最左边或最右边, ...

  3. 113. Leetcode 674. 最长连续递增序列 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]:以下标i为结尾的数组的连续递增的子序列长度为dp[i]. 注意这里的定义,一定是以下标i为结尾,并不是说一定以下标0为起始位置. 步骤二.推断状 ...

  4. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  5. 【代码随想录】-动态规划专题

    文章目录 理论基础 斐波拉契数列 爬楼梯 使用最小花费爬楼梯 不同路径 不同路径 II 整数拆分 不同的二叉搜索树 背包问题--理论基础 01背包 二维dp数组01背包 一维数组(滚动数组) 装满背包 ...

  6. LeetCode 题解随笔:动态规划(一)

    目录 零.前言 一.基础题目 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯[*] 62. 不同路径 63. 不同路径 II 343. 整数拆分[*]​​​​​​ 96. 不同的二 ...

  7. 【SCMS】最短公共母序列的代码实现

    前言 其实说起初衷,是之前吾辈的学校开展了个数模比赛,我去帮别人当帮手,当时的B题是基因拼接,D题是污染程度评定 作为ACMer,我当然喜欢B题这种像ACM竞赛题一样感觉的东西,但无奈人家才是参(da ...

  8. Java动态规划算法从入门的到熟练

    文章目录 一.动态规划 1. 定义 2. 基本思想和策略 3. 解题思路 4. 使用情况 二.算法笔记 509. 斐波那契数 1137. 第 N 个泰波那契数 70. 爬楼梯 746. 使用最小花费爬 ...

  9. LeetCode44 Wildcard Matching

    题目: Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single charact ...

最新文章

  1. 小蚂蚁学习mysql性能优化(4)--SQL以及索引优化--具体一些优化方法
  2. 每天一个linux命令(2):cd命令
  3. C++ BYTE数组转字符串
  4. Lync Server 2013与OWA的集成
  5. Java 基本数据类型 sizeof 功能
  6. 4.2 Tensorflow笔记:池化函数
  7. 飞鱼知识变现小程序2.5.3源码_小程序功能模块
  8. SpringSecurity常用登录认证方案
  9. [转载] gamma函数stiriling公式_数学笔记|特殊函数(1):Gamma函数
  10. 多参selector
  11. linux mk文件6,linux_2.6.30.4_Makefile_3--Makefile学习笔记
  12. 巨人 index.php/user/login,dedecms实现首页顶部会员登陆框的方法
  13. 计算机毕业论文数据挖掘,数据挖掘论文范文
  14. 毕业设计——基于STM32的智能家具系统(语音识别控制、步进电机、舵机)
  15. Echarts正态分布曲线
  16. linux 进程 网速监控
  17. 前端项目emoji表情包的使用
  18. 2021-5-1 【PTA】【L1-6 不变初心数 (15 分)】
  19. 2022全球新能源与智能汽车供应链创新大会|爱普搜同期项目对接会
  20. Excel·VBA工作簿拆分所有工作表单独保存

热门文章

  1. prim算法适用条件_prim算法
  2. c语言 int max,C语言 0x7fffffff是多少(也就是INT_MAX,首位是 0,其余都是1,f代表1111)...
  3. 高通平台 设置LDO电源域
  4. 关于pycharm怎么设置中文、背景图、快捷键的一些小Tips
  5. .net关键词中英文对照
  6. C# Expression表达式目录树
  7. 并发环境下往数据库插入数据时,多插入数据问题
  8. 如何明晰定位与责任_学会如何自我定位
  9. 无法连接至网络之DNS配置
  10. kali linux渗透测试之漏洞扫描