lanqiaoOJ 2148 数组切分

简介: lanqiaoOJ 2148 数组切分

1.数组切分 - 蓝桥云课 (lanqiao.cn)

好的题解AcWing 4668. 数组切分 - AcWing

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
const int N = 10010 ,M = 1e9+7;
typedef long long LL ;
LL dp[N] ;//\\表示前i个数可以划分的自然数组的数量
LL a[N] ;//\\存储原数组
int main(){
  int n ; cin >> n ;
  for(int i = 1 ;i <= n ; i ++) cin >>a[i] ;
  dp[0] = 1 ;//\\初始化
  for(int i = 1; i <= n ; i ++){
    LL mi,ma ;//\\定义一个最大值和最小值
    mi = ma = a[i];\\当最大值减最小值等于数组长度时说明可以组成一个自然数组
    for(int j = i ; j >= 1 ; j --){
      mi = min(mi,a[j]) ; ma = max(ma,a[j]) ;
      if(i-j==ma-mi){//\\j--i 可以组成一个自然数组,然后j-1 之前的数组成的自然数组都可以组成i的自然数组
        dp[i] = (dp[i] + dp[j-1]) % M ;
      }
    }
  }
  cout << dp[n] << endl ;
  return 0 ;
}
相关文章
|
5月前
|
算法 前端开发
100224. 分割数组
100224. 分割数组
38 0
|
5月前
DAY-2 | 哈希表、指针与区间划分:字符种数统计问题
```markdown ## 题干 [牛客网链接](https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50) ## 题解 1. **查表法(哈希表)**:利用数组标记出现过的 ASCII 值小于127的字符,首次出现计数,重复则忽略。 2. **指针与区间划分(回头法)**:遍历字符串,对每个字符检查其前所有字符是否重复,重复则不计数。 ## 方法总结 - 哈希表在去重问题中非常实用,可多做相关练习。 - 使用`continue`时注意避免死循环,确保循环变量会改变。 - 多回顾此类问题以巩固理解。 ```
39 2
|
5月前
|
人工智能 BI
leetcod-561:数组拆分 I
leetcod-561:数组拆分 I
38 0
|
11月前
|
C语言
数组拆分与合并
C 语言实例 - 数组拆分与合并
45 1
从排列字符串到排列序列:解析增减字符串匹配问题
题目要求根据给定的字符串 s,构造一个排列序列 perm,其中排列序列中的数字满足以下规则: 如果 perm[i] < perm[i + 1],则对应的字符为 'I'; 如果 perm[i] > perm[i + 1],则对应的字符为 'D'。 我们需要根据字符串 s 中的字符,构造满足上述规则的排列序列 perm。
52 0
|
人工智能 算法 Java
LeetCode 算法 | 如何拆分数组?
LeetCode 算法 | 如何拆分数组?
|
人工智能 BI C++
数组拆分(C++)
你的任务是将这些数分成。
110 0
|
存储 算法 容器
Leetcode 76最小覆盖子串&77组合&78子集
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。
114 0
Leetcode 76最小覆盖子串&77组合&78子集
|
存储
字符串按照固定长度分割并存储在数组
字符串按照固定长度分割并存储在数组
180 0
|
人工智能 BI
【leetcode】561. 数组拆分 I
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。
117 0
【leetcode】561. 数组拆分 I