蓝桥杯-数组切分

问题描述

已知一个长度为 N 的数组: A1,A2,A3,...AN 恰好是1~ N的一个排列。现 在要求你将 4 数组切分成若干个 (最少一个,最多 N 个)连续的子数组,并且 每个子数组中包含的整数恰好可以组成一段连续的自然数。

例如对于 4 = 1,3,2,4,一共有 5 种切分方法:

1324:每个单独的数显然是(长度为 1的)一段连续的自然数。

{1}{3,2}{4}:{3,2}包含2到3,是 一段连续的自然数,另外 1 和 4 显然 也是。

{1}{3,2,4}:{3,2,4}包含2到4,是一段连续的自然数,另外1显然也是。

{1,3,2}{4}:{1,3,2}包含1到3,是 一段连续的自然数,另外 4 显然也是。

{1,3,2,4}:只有一个子数组,包含1到4,是 一段连续的自然数。

输入格式

第一行包含一个整数 N 。第二行包含 N 个整数,代表 4 数组。

输出格式

输出一个整数表示答案。由于答案可能很大,所以输出其对1000000007 取 模后的值

样例输入

样例输出

评测用例规模与约定

对于 30% 评测用例,1<N<20.

对于 100% 评测用例,1<N<10000

运行限制

最大运行时间:5s。

最大运行内存:512M

java 复制代码
import java.util.Scanner;
public class Main {
    static int mod = 1000000007;
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int[] a=new int[n+1];
        for (int i=1;i<=n;i++) a[i]=scan.nextInt();
        //dp[i]:以a[i]结尾的切分合法数组的方法数量
        int[] dp=new int[n+1];
        dp[0]=1;//初始化
        for (int i=1;i<=n;i++){
            int max=Integer.MIN_VALUE,min=Integer.MAX_VALUE;//注意初始化:max是小的,min是大的
            for (int j=i;j>0;j--){
                max =Math.max(max,a[j]);
                min =Math.min(min,a[j]);
                if (max-min==i-j) dp[i]=(dp[i]+dp[j-1])%mod;

            }
        }
        System.out.println(dp[n]);
    }
}
相关推荐
我命由我123451 小时前
Photoshop - Photoshop 快速共享作品
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
我命由我123451 小时前
自动化 / 智能装配的对象、内容、层级
运维·学习·职场和发展·自动化·求职招聘·职场发展·学习方法
AI职业加油站1 小时前
大模型开发工程师证书怎么考?零基础学习路径与价值拆解
大数据·人工智能·学习·职场和发展·数据分析
blxr_2 小时前
力扣hot100爬楼梯https://leetcode.cn/problems/climbing-stairs/
算法·leetcode·职场和发展
我命由我123454 小时前
Photoshop - 将Photoshop图像置入其他应用程序
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
blxr_7 小时前
力扣hot100前k个高频元素https://leetcode.cn/problems/top-k-frequent-elements/
算法·leetcode·职场和发展
财情双生教练易和中18 小时前
“找矿大会战”产业链,量化统计研究报告
职场和发展·职业发展·创业创新·程序员创富
yuanxi20018 小时前
001267拟扩产光模块:大客户销售如何用价值力读一条扩产公告
人工智能·职场和发展·创业创新·学习方法
Interview Aid11219 小时前
Google SWE Intern Interview Process:OA、Coding 与面试流程详解
面试·职场和发展
垆边人似月.1 天前
字符串重排后最大字典序
算法·leetcode·职场和发展